Help with optimize analitics query .
HI,
I've got Oracle 10.2.0.3 query like :
select * from
select rank() over (partition by t1.customer_key order by
func(t1.klt_dlugosc,t1.klt_szerokosc,t2.gemfo_dlugosc,t2.gemfo_szerokosc),rownum) as id,
t1.customer_key,
func(t1.klt_dlugosc,t1.klt_szerokosc,t2.gemfo_dlugosc,t2.gemfo_szerokosc) odleg_gemfo,
t2.gemfo_id
from tmp_22_geo_0309 t1,
(select * from adresy_gemfo_geo t2)) where id<3;
PLAN_TABLE_OUTPUT
Plan hash value: 187241240
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 10M| 486M| | 109K (2)| 00:25:28 |
|* 1 | VIEW | | 10M| 486M| | 109K (2)| 00:25:28 |
|* 2 | WINDOW SORT PUSHED RANK| | 10M| 630M| 1455M| 109K (2)| 00:25:28 |
| 3 | COUNT | | | | | | |
| 4 | MERGE JOIN CARTESIAN | | 10M| 630M| | 9720 (3)| 00:02:17 |
| 5 | TABLE ACCESS FULL | ADRESY_GEMFO_GEO | 151 | 5738 | | 3 (0)| 00:00:01 |
| 6 | BUFFER SORT | | 66293 | 1812K| | 109K (2)| 00:25:28 |
| 7 | TABLE ACCESS FULL | TMP_22_GEO_0309 | 66293 | 1812K| | 64 (2)| 00:00:01 |
Predicate Information (identified by operation id):
1 - filter("ID"<3)
2 - filter(RANK() OVER ( PARTITION BY "CUSTOMER_KEY" ORDER BY
func("KLT_DLUGOSC","KLT_SZEROKOSC","ADRESY_GEMFO_GEO"."GEMFO_DLUGOSC","ADRESY_GEMFO_GEO"."
GEMFO_SZEROKOSC"),ROWNUM)<3)
Note
- dynamic sampling used for this statement
is burning CPU , an d runs like 2h
t1 is 66293 rows
and t2 is 151 rows
is there any way to rewrite this ?
function func is doing some geolocation related math like sin/cos abs .
Regards.
Greg
Yes, thats expected (cartesian join), tables are small .
Function is doing geolocation calculations like:
CREATE OR REPLACE function func (dlugosc_geo_1 number,
szerokosc_geo_1 number,
dlugosc_geo_2 number,
szerokosc_geo_2 number) return number
is
a_1 number;
c_1 number;
d_1 number;
metry number := 1000;
r_ziemi number := 6371;
pi number := 3.1415926535897932384626433832795028841972;
dLat number;
dLon number;
szer_1 number;
szer_2 number;
begin
dLat := abs(szerokosc_geo_2-szerokosc_geo_1)*pi/180;
dLon := abs(dlugosc_geo_2-dlugosc_geo_1)*pi/180;
szer_1 := szerokosc_geo_1 * pi/180;
szer_2 := szerokosc_geo_2 * pi/180;
a_1 := sin(dLat/2) * sin(dLat/2) +
cos(szer_1) * cos(szer_2) *
sin(dLon/2) * sin(dLon/2);
c_1 := 2 * atan2(sqrt(a_1), sqrt(1-a_1));
d_1 := round(metry * r_ziemi * c_1);
RETURN d_1;
end;
/
Similar Messages
-
Need some help with the Select query.
Need some help with the Select query.
I had created a Z table with the following fields :
ZADS :
MANDT
VKORG
ABGRU.
I had written a select query as below :
select single vkorg abgru from ZADS into it_rej.
IT_REJ is a Work area:
DATA : BEGIN OF IT_REJ,
VKORG TYPE VBAK-VKORG,
ABGRU TYPE VBAP-ABGRU,
END OF IT_REJ.
This is causing performance issue. They are asking me to include the where condition for this select query.
What should be my select query here?
Please suggest....
Any suggestion will be apprecaiated!
Regards,
DeveloperHello Everybody!
Thank you for all your response!
I had changes this work area into Internal table and changed the select query. PLease let me know if this causes any performance issues?
I had created a Z table with the following fields :
ZADS :
MANDT
VKORG
ABGRU.
I had written a select query as below :
I had removed the select single and insted of using the Structure it_rej, I had changed it into Internal table
select vkorg abgru from ZADS into it_rej.
Earlier :
IT_REJ is a Work area:
DATA : BEGIN OF IT_REJ,
VKORG TYPE VBAK-VKORG,
ABGRU TYPE VBAP-ABGRU,
END OF IT_REJ.
Now :
DATA : BEGIN OF IT_REJ occurs 0,
VKORG TYPE VBAK-VKORG,
ABGRU TYPE VBAP-ABGRU,
END OF IT_REJ.
I guess this will fix the issue correct?
PLease suggest!
Regards,
Developer. -
Help with an SQL Query on the Logger
We are running UCCE 8.5(3) and need help with an SQL query. When I run the below I would also like to see skill group information(name preferably)? Any help would be greatly appreciated!
select * from dbo.t_Termination_Call_Detail where DateTime between '10-11-2012 00:00:00:00' and
'10-11-2012 23:59:59:59'David, thanks for replying. Unfortunitly I don't know enough about SQL to put that into a query and have it return data. Would you be able to give an example on what the query would look like?
-
Need help on optimization of query
Basically I had some query which should have been optimized. I did some optimization, but I guess it could be optimized more. Please help
DATA_
PK - ID
FK - ID (HIER ID)
VAL nullable
ATTR1 not null
ATTR2 not null
HIER
PK -ID
L1 - not null
L2 - not null
L3 - not null
WITH data_ AS
SELECT 1 ID, 20 val, 1 attr1, 1 attr2
FROM DUAL
UNION ALL
SELECT 2, 30, 0, 1
FROM DUAL
UNION ALL
SELECT 3, 40, 1, 1
FROM DUAL
UNION ALL
SELECT 4, 50, 0, 0
FROM DUAL
UNION ALL
SELECT 5, 60, 1, 0
FROM DUAL
UNION ALL
SELECT 6, 70, 0, 1
FROM DUAL
UNION ALL
SELECT 7, 80, 1, 1
FROM DUAL
UNION ALL
SELECT 8, 10, 1, 0
FROM DUAL
UNION ALL
SELECT 9, 15, 1, 1
FROM DUAL),
hier AS
SELECT 1 ID, 11 l1, 21 l2, 31 l3
FROM DUAL
UNION ALL
SELECT 2, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 3, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 4, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 5, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 6, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 7, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 8, 14, 23, 32
FROM DUAL
UNION ALL
SELECT 9, 11, 21, 31
FROM DUAL)
SELECT 'ALL' lev, SUM (val) avg_
FROM data_
UNION ALL
SELECT 'ATTR1 = ' || attr1, SUM (val)
FROM data_
GROUP BY attr1
UNION ALL
SELECT 'ATTR2 = ' || attr2, SUM (val)
FROM data_
GROUP BY attr2
UNION ALL
SELECT 'L3 = ' || l3, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l3 IN (SELECT l3
FROM hier
WHERE l1 = :l1)
GROUP BY l3
UNION ALL
SELECT 'L2 = ' || l2, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l2 IN (SELECT l2
FROM hier
WHERE l1 = :l1)
GROUP BY l2
UNION ALL
SELECT 'L1 = ' || l1, SUM (val)
FROM data_ d, hier h
WHERE d.ID = h.ID AND l1 = :l1
GROUP BY l1
UNION ALL
SELECT 'ID = ' || h.ID, val
FROM data_ d, hier h
WHERE d.ID = h.ID AND l1 = :l1
Now it looks like
WITH data_ AS
SELECT 1 ID, 20 val, 1 attr1, 1 attr2
FROM DUAL
UNION ALL
SELECT 2, 30, 0, 1
FROM DUAL
UNION ALL
SELECT 3, 40, 1, 1
FROM DUAL
UNION ALL
SELECT 4, 50, 0, 0
FROM DUAL
UNION ALL
SELECT 5, 60, 1, 0
FROM DUAL
UNION ALL
SELECT 6, 70, 0, 1
FROM DUAL
UNION ALL
SELECT 7, 80, 1, 1
FROM DUAL
UNION ALL
SELECT 8, 10, 1, 0
FROM DUAL
UNION ALL
SELECT 9, 15, 1, 1
FROM DUAL),
hier AS
SELECT 1 ID, 11 l1, 21 l2, 31 l3
FROM DUAL
UNION ALL
SELECT 2, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 3, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 4, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 5, 11, 21, 31
FROM DUAL
UNION ALL
SELECT 6, 12, 21, 31
FROM DUAL
UNION ALL
SELECT 7, 13, 22, 31
FROM DUAL
UNION ALL
SELECT 8, 14, 23, 32
FROM DUAL
UNION ALL
SELECT 9, 11, 21, 31
FROM DUAL),
level_id AS
(SELECT 11 l
FROM DUAL)
SELECT DECODE (GROUPING_ID (attr2, attr1),
1, 'ATTR2 = ' || attr2,
2, 'ATTR1 = ' || attr1,
3, 'All'
) lev,
SUM (val)
FROM data_
GROUP BY CUBE (attr2, attr1)
HAVING GROUPING_ID (attr2, attr1) > 0
UNION ALL
SELECT lev, val
FROM (SELECT DECODE (GROUPING_ID (d.ID, l1, l2, l3),
11, 'L1 = ' || l1,
13, 'L2 = ' || l2,
14, 'L3 = ' || l3,
'ID = ' || d.ID
) lev,
SUM (val) val
FROM data_ d, hier h, level_id
WHERE d.ID = h.ID AND h.l3 IN (SELECT h1.l3
FROM hier h1
WHERE h1.l1 = l)
GROUP BY CUBE (d.ID, l3, l2, l1)
HAVING (h.l1 IS NULL OR l1 = l)
AND GROUPING_ID (d.ID, l1, l2, l3) IN (14, 13, 11, 0)
AND (h.l2 IS NULL OR h.l2 = (SELECT UNIQUE h1.l2
FROM hier h1
WHERE h1.l1 = l))
ORDER BY GROUPING_ID (d.ID, l1, l2, l3) DESC)Nobody can optimize you query just from having the query. We don't know anything about your database, your data, your database configuration, table structures, indexes, or what the query is supposed to achieve etc. etc. etc.
Take a look at this thread...
When your query takes too long ... -
I have the following table
EX_ID
EX_NAME
EX_SURNAME
EX_FLAG
1
TOM
JONES
Y
1
JIM
SLIM
N
1
BO
SELECTA
Y
2
AIRES
BEARS
N
2
JIM
DAVIES
Y
3
PAUL
BALL
N
3
YOU
KNOW
N
I need to create a query that only displays one of the ex_id’s, it doesn’t matter which one. When the query has been run it will look like below:
EX_ID
EX_NAME
EX_SURNAME
EX_FLAG
1
TOM
JONES
Y
2
AIRES
BEARS
N
3
YOU
KNOW
N
Can anyone help with this query?SELECT * FROM
SELECT *,ROW_NUMBER () OVER (PARTITION BY ex_id ORDER BY (SELECT 0))
FROM tbl
) AS Der WHERE rn=1
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence -
Help with Inner Join query in SQL
Hope someone can help with this, as this is quite an involved project for me, and I'm just about there with it.
My table structure is :
table_packages
packageID
package
packageDetails
etc
table_destinations
destinationID
destination
destinationDetails
etc
table_packagedestinations
packageID
destinationID
..so nothing that complicated.
So the idea is that I can have a package details page which shows the details of the package, along any destinations linked to that package via the packagedestinations table.
So this is the last part really - to get the page to display the destinations, but I'm missing something along the way....
This is the PHP from the header, including my INNER JOIN query....
PHP Code:
<?php
$ParampackageID_WADApackages = "-1";
if (isset($_GET['packageID'])) {
$ParampackageID_WADApackages = (get_magic_quotes_gpc()) ? $_GET['packageID'] : addslashes($_GET['packageID']);
$ParamSessionpackageID_WADApackages = "-1";
if (isset($_SESSION['WADA_Insert_packages'])) {
$ParamSessionpackageID_WADApackages = (get_magic_quotes_gpc()) ? $_SESSION['WADA_Insert_packages'] : addslashes($_SESSION['WADA_Insert_packages']);
$ParampackageID2_WADApackages = "-1";
if (isset($_GET['packageID'])) {
$ParampackageID2_WADApackages = (get_magic_quotes_gpc()) ? $_GET['packageID'] : addslashes($_GET['packageID']);
mysql_select_db($database_connPackages, $connPackages);
$query_WADApackages = sprintf("SELECT packageID, package, costperpax, duration, baselocation, category, dateadded, agerange, hotel, educational_tours, field_trips, corporate_outings, plant_visits, budget_package, rollingtours, teambuilding, description, offer FROM packages WHERE packageID = %s OR ( -1= %s AND packageID= %s)", GetSQLValueString($ParampackageID_WADApackages, "int"),GetSQLValueString($ParampackageID2_WADApackages, "int"),GetSQLValueString($ParamSessionpackageID_WADApackages, "int"));
$WADApackages = mysql_query($query_WADApackages, $connPackages) or die(mysql_error());
$row_WADApackages = mysql_fetch_assoc($WADApackages);
$totalRows_WADApackages = mysql_num_rows($WADApackages);
$colname_educationalDestinations = "1";
if (isset($_GET['PackageID'])) {
$colname_educationalDestinations = (get_magic_quotes_gpc()) ? packageID : addslashes(packageID);
mysql_select_db($database_connPackages, $connPackages);
$query_educationalDestinations = sprintf("SELECT * FROM destinations INNER JOIN (packages INNER JOIN packagedestinations ON packages.packageID = packagedestinations.packageID) ON destinations.destinationID = packagedestinations.destinationID WHERE packages.packageID = %s ORDER BY destination ASC", GetSQLValueString($colname_educationalDestinations, "int"));
$educationalDestinations = mysql_query($query_educationalDestinations, $connPackages) or die(mysql_error());
$row_educationalDestinations = mysql_fetch_assoc($educationalDestinations);
$totalRows_educationalDestinations = mysql_num_rows($educationalDestinations);
?>
And where I'm trying to display the destinations themselves, I have :
<table>
<tr>
<td>Destinations :</td>
</tr>
<?php do { ?>
<tr>
<td><?php echo $row_educationalDestinations['destination']; ?></td>
</tr>
<?php } while ($row_educationalDestinations = mysql_fetch_assoc($educationalDestinations)); ?>
</table>
If anyone could have a quick look and help me out that would be much appreciated - not sure if its my SQL at the top, or the PHP in the page, but either way it would be good to get it working.
Thanks.First off, you need to get the database tables so that there is a relationship between them.
In fact, if there is a one to one relationship, then it may be better to store all of your information in one table such as
table_packages
packageID
package
packageDetails
destination
destinationDetails
etc
If there is a one to many relationship, then the following would be true
packages
packageID
package
packageDetails
etc
destinations
destinationID
packageID
destination
destinationDetails
etc
The above assumes that there are many destinations to one package with the relationship coloured orange.
Once you have the above correct you can apply your query as follows
SELECT *
FROM packages
INNER JOIN destinations
ON packages.packageID = destinations.packageID
WHERE packages.packageID = %s
ORDER BY destination ASC
The above query will show all packages with relevant destinations -
Need help with LikeFilter for querying the keyset instead of value
Hi,
I'm looking for help with the LikeFilter.
I need to query the cache to get all entries with key starting with a particular string.
I could see samples using LikeFilter for querying the values in the cache but not the keyset.
Can someone help?
E.g:
Cache Entries:
abc123 - value1
abc234 - value2
bcd123 - value3
I want to get all entries with key starting with 'abc'.
thanks,
rama.NJ, thanks for the quick reply.
I tried something similar (as below) but this code gives me 'java.lang.NoClassDefFoundError: com/tangosol/util/ValueExtractor'.
KeyExtractor extractor = new KeyExtractor("getKey");
Filter filter = new LikeFilter(extractor, id+":%",'-',false);
-rama.
Edited by: 911950 on Feb 2, 2012 1:18 PM -
Hi,
I've got a server audit log in PowerPivot (114,000 rows) which I provide some basic reporting from (PowerPivot is not my specialist subject so go easy). What I now need to perform a Distinct filter, but can't get the logic right. Basically the log
as two bits of information, 1) is the source of the job and 2) if it was a success or failure. What I need to do is to find all of the Source items that have never completed sucessfully. Any ideas on what formula is best to use, or
do I need to split in to multiple sheets and create a table relationship?
Source,Status
======,======
Source1,Fail
Source1,Fail
Source1,Success
Source2,Fail
Source3,Fail
Source3,Success
So in the above example, I would only expect the filter to show me Source2
Thanks
AlexHi Alex,
using Power Query instead, it would work like this:
Once you've pushed your table to PQ, add a column "helper" with value=1.
Then pivot on "Status", taking "helper"-column into "values column"
(hope translation is understandable, as I'm using localized Version & translation via "Quick info" isn't working in the PQ menu)
Then filter on column "Success" = blank.
Imke -
I need help with a SELECT query - help!
Hello, I need help with a select statement.
I have a table with 2 fields as shown below
Name | Type
John | 1
John | 2
John | 3
Paul | 1
Paul | 2
Paul | 3
Mark | 1
Mark | 2
I need a query that returns everything where the name has type 1 or 2 but not type 3. So in the example above the qery should bring back all the "Mark" records.
Thanks,
IanOr, if the types are sequential from 1 upwards you could simply do:-
SQL> create table t as
2 select 'John' as name, 1 as type from dual union
3 select 'John',2 from dual union
4 select 'John',3 from dual union
5 select 'Paul',1 from dual union
6 select 'Paul',2 from dual union
7 select 'Paul',3 from dual union
8 select 'Paul',4 from dual union
9 select 'Mark',1 from dual union
10 select 'Mark',2 from dual;
Table created.
SQL> select name
2 from t
3 group by name
4 having count(*) <= 2;
NAME
Mark
SQL>Or another alternative if they aren't sequential:
SQL> ed
Wrote file afiedt.buf
1 select name from (
2 select name, max(type) t
3 from t
4 group by name
5 )
6* where t < 3
SQL> /
NAME
Mark
SQL>Message was edited by:
blushadow -
Hi,
I have another query running slow when executed from cognos. It is also not returning any output continues to execute,
with "Union15" as (
select distinct CASE WHEN(substr(to_char(FLOOR("EES_ENERGY_MASTER"."DISC_MON"/100)), 1, 4) IS NULL) OR (case substr(to_char(FLOOR("EES_ENERGY_MASTER"."DISC_MON"/100)), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end IS NULL) THEN NULL ELSE (substr(to_char(FLOOR("EES_ENERGY_MASTER"."DISC_MON"/100)), 1, 4)||case substr(to_char(FLOOR("EES_ENERGY_MASTER"."DISC_MON"/100)), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end ) END "QUARTER", "EES_ENERGY_MASTER"."PAT_KEY" "Cases_Using_Energy", 0 "Total_Cases"
from "MDM_DBA"."EES_ENERGY_MASTER" "EES_ENERGY_MASTER", "MDM_DBA"."EES_CONS_PROV" "EES_CONS_PROV"
where "EES_ENERGY_MASTER"."DISC_MON">=2006101 and "EES_ENERGY_MASTER"."PDCT_CAT"='Energy' and substr("EES_ENERGY_MASTER"."ICD_CODE", 1, 2)='68-gyn' and "EES_ENERGY_MASTER"."MANUFACTURER"='EES' and "EES_CONS_PROV"."CONS_06_09_YN" in ('N', 'Y') and "EES_ENERGY_MASTER"."PROV_ID"="EES_CONS_PROV"."PROV_ID" union
select CASE WHEN(substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 1, 4) IS NULL) OR (case substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end IS NULL) THEN NULL ELSE (substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 1, 4)||case substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end ) END "QUARTER", 0 "Cases_Using_Energy", count("MVW_EES_ICD_STATS"."CASES") "Total_Cases"
from "MDM_DBA"."MVW_EES_ICD_STATS" "MVW_EES_ICD_STATS", "MDM_DBA"."EES_CONS_PROV" "EES_CONS_PROV", "MDM_DBA"."EES_HOSP_CHG_PROV" "EES_HOSP_CHG_PROV"
where "MVW_EES_ICD_STATS"."DISC_QTR">=20061 and "MVW_EES_ICD_STATS"."ICD_GROUP"='68-gyn' and "EES_CONS_PROV"."CONS_06_09_YN" in ('N', 'Y') and "EES_HOSP_CHG_PROV"."PDCT_CAT"='Energy' and "EES_HOSP_CHG_PROV"."MANUFACTURER"='EES' and "MVW_EES_ICD_STATS"."PROV_ID"="EES_CONS_PROV"."PROV_ID" and "MVW_EES_ICD_STATS"."PROV_ID"="EES_HOSP_CHG_PROV"."PROV_ID"
group by CASE WHEN(substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 1, 4) IS NULL) OR (case substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end IS NULL) THEN NULL ELSE (substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 1, 4)||case substr(to_char(FLOOR("MVW_EES_ICD_STATS"."DISC_QTR")), 5, 1) when '1' then 'Q1' when '2' then 'Q2' when '3' then 'Q3' when '4' then 'Q4' end ) END)
select "T1"."C0" "levelkey", "T1"."C1" "Cases_Using_Energy", "T0"."C0" "Cases_Using_Energy1", "T1"."C2" "Total_Cases"
from (
select count(distinct "Union15"."Cases_Using_Energy") "C0"
from "Union15") "T0", (
select "Union15"."QUARTER" "C0", count(distinct "Union15"."Cases_Using_Energy") "C1", sum("Union15"."Total_Cases") "C2"
from "Union15"
group by "Union15"."QUARTER") "T1"The explain plan is as follows,
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost |
| 0 | SELECT STATEMENT | | 1 | 50 | | 22 |
| 2 | TEMP TABLE TRANSFORMATION | | | | | |
| 1 | RECURSIVE EXECUTION | SYS_LE_2_0 | | | | |
| 0 | INSERT STATEMENT | | 3053 | 128K| | 1372 |
| 1 | LOAD AS SELECT | | | | | |
| 2 | SORT UNIQUE | | 3053 | 128K| 376K| 1372 |
| 3 | UNION-ALL | | | | | |
|* 4 | HASH JOIN | | 3052 | 128K| | 185 |
|* 5 | TABLE ACCESS FULL | EES_CONS_PROV | 622 | 3732 | | 2 |
|* 6 | TABLE ACCESS BY INDEX ROWID | EES_ENERGY_MASTER | 3055 | 110K| | 182 |
|* 7 | INDEX RANGE SCAN | IDX_ENERGY_PDCT_CAT | 1978 | | | 2478 |
| 8 | SORT GROUP BY | | 1 | 40 | | 1160 |
|* 9 | TABLE ACCESS BY INDEX ROWID | EES_HOSP_CHG_PROV | 4 | 72 | | 1 |
| 10 | NESTED LOOPS | | 1 | 40 | | 1157 |
| 11 | NESTED LOOPS | | 1 | 22 | | 1156 |
|* 12 | TABLE ACCESS BY INDEX ROWID| MVW_EES_ICD_STATS | 1 | 16 | | 1155 |
|* 13 | INDEX RANGE SCAN | MVWICDSTATS_DISCQTR_IDX | 13M| | | 26068 |
|* 14 | TABLE ACCESS BY INDEX ROWID| EES_CONS_PROV | 1 | 6 | | 1 |
|* 15 | INDEX UNIQUE SCAN | EES_CONS_PROV_PK | 1 | | | |
|* 16 | INDEX RANGE SCAN | PROV_ID_IDX_2 | 65 | | | 1 |
| 3 | MERGE JOIN CARTESIAN | | 1 | 50 | | 22 |
| 4 | VIEW | | 1 | 13 | | 3 |
| 5 | SORT GROUP BY | | 1 | 13 | | |
| 6 | VIEW | | 3053 | 39689 | | 3 |
| 7 | TABLE ACCESS FULL | SYS_TEMP_0FD9D68B3_C112F95D | 3053 | 110K| | 3 |
| 8 | VIEW | | 1 | 37 | | 19 |
| 9 | SORT GROUP BY | | 1 | 37 | | 19 |
| 10 | VIEW | | 3053 | 110K| | 3 |
| 11 | TABLE ACCESS FULL | SYS_TEMP_0FD9D68B3_C112F95D | 3053 | 110K| | 3 |
Predicate Information (identified by operation id):
4 - access("EES_ENERGY_MASTER"."PROV_ID"="EES_CONS_PROV"."PROV_ID")
5 - filter("EES_CONS_PROV"."CONS_06_09_YN"='N' OR "EES_CONS_PROV"."CONS_06_09_YN"='Y')
6 - filter("EES_ENERGY_MASTER"."DISC_MON">=2006101 AND SUBSTR("EES_ENERGY_MASTER"."ICD_CODE",1,2)='68-gyn'
AND "EES_ENERGY_MASTER"."MANUFACTURER"='EES')
7 - access("EES_ENERGY_MASTER"."PDCT_CAT"='Energy')
9 - filter("EES_HOSP_CHG_PROV"."PDCT_CAT"='Energy' AND "EES_HOSP_CHG_PROV"."MANUFACTURER"='EES')
12 - filter("MVW_EES_ICD_STATS"."ICD_GROUP"='68-gyn')
13 - access("MVW_EES_ICD_STATS"."DISC_QTR">=20061 AND "MVW_EES_ICD_STATS"."DISC_QTR" IS NOT NULL)
14 - filter("EES_CONS_PROV"."CONS_06_09_YN"='N' OR "EES_CONS_PROV"."CONS_06_09_YN"='Y')
15 - access("MVW_EES_ICD_STATS"."PROV_ID"="EES_CONS_PROV"."PROV_ID")
16 - access("MVW_EES_ICD_STATS"."PROV_ID"="EES_HOSP_CHG_PROV"."PROV_ID")
Please help with some solution.OK: the third parameter of the SUBSTR function indicates the (maximum) length of the returnd string.
Therefore SUBSTR("EES_ENERGY_MASTER"."ICD_CODE",1,2) could possibly be '68' , but never '68-gyn'.
'68-gyn' is just 4 characters too long.
Urs -
Need help with writing a query with dynamic FROM clause
Hi Folks,
I need help with an query that should generate the "FROM" clause dynamically.
My main query is as follows
select DT_SKEY, count(*)
from *???*
where DT_SKEY between 20110601 and 20110719
group by DT_SKEY
having count(*) = 0
order by 1; The "from" clause of the above query should be generated as below
select 'Schema_Name'||'.'||TABLE_NAME
from dba_tables
where OWNER = 'Schema_Name'Simply sticking the later query in the first query does not work.
Any pointers will be appreciated.
Thanks
rogers42Hi,
rogers42 wrote:
Hi Folks,
I need help with an query that should generate the "FROM" clause dynamically.
My main query is as follows
select DT_SKEY, count(*)
from *???*
where DT_SKEY between 20110601 and 20110719
group by DT_SKEY
having count(*) = 0
order by 1; The "from" clause of the above query should be generated as below
select 'Schema_Name'||'.'||TABLE_NAME
from dba_tables
where OWNER = 'Schema_Name'
Remember that anything inside quotes is case-sensitive. Is the owner really "Schema_Name" with a capital S and a capital N, and 8 lower-case letters?
Simply sticking the later query in the first query does not work.Right; the table name must be given when you compile the query. It's not an expression that you can generate in the query itself.
Any pointers will be appreciated.In SQL*Plus, you can do something like the query bleow.
Say you want to count the rows in scott.emp, but you're not certain that the name is emp; it could be emp_2011 or emp_august, or anything else that starts with e. (And the name could change every day, so you can't just look it up now and hard-code it in a query that you want to run in the future.)
Typically, how dynamic SQL works is that some code (such as a preliminary query) gets some of the information you need to write the query first, and you use that information in a SQL statement that is compiled and run after that. For example:
-- Preliminary Query:
COLUMN my_table_name_col NEW_VALUE my_table_name
SELECT table_name AS my_table_name_col
FROM all_tables
WHERE owner = 'SCOTT'
AND table_name LIKE 'E%';
-- Main Query:
SELECT COUNT (*) AS cnt
FROM scott.&my_table_name
;This assumes that the preliminary query will find exactly one row; that is, it assumes that SCOTT has exactly one table whose name starts with E. Could you have 0 tables in the schema, or more than 1? If so, what results would you want? Give a concrete example, preferably suing commonly available tables (like those in the SCOTT schema) so that the poepl who want to help you can re-create the problem and test their ideas.
Edited by: Frank Kulash on Aug 11, 2011 2:30 PM -
Help with a update query from a subquery
Hello All,
I wanted to see if someone can help me with an update query.
I need to grab a latitude & longitude from a the same user that is in two accounts. therefore i am trying to update lat/long in a users table for one account based off of the same user in another account. I am matching the users up by phone number and last name. I tried a subquery but am having difficulty.
I was thinking of something like the following:
update users
set lat = getlat, long = getlong
inner join (select lat as getlat, long as get long from users where account_id = '1')
on phone = phone and last name = lastname
where account_id = '2' and lat IS NULL and long IS NULL
Am I going in the right direction???
Thanks in advance for any assistance!!!!What difficulty are you having? Have you tried what you posted and get an error?
Although someone may be able to give you sql advice here, I would try posting this over at Stack Overflow as its not really related to Coldfusion. -
Help With Geodetic Rectangular Query Please
I'm new to spatial so I appreciate your help.
I have a 3D geodetic coordinate system defined that is index in 2D (lon & lat).
I want to do a query that returns all points (lat, lon, alt) within the rectangle described by the query.
I read in the "Oracle Spatial User's Guide" that this rectangle must have 5 points (since I'm using geodetic).
I have not found a good example of how to format the query. Can you help with an example?here is an example which assume a wgs-84 coordinate system (srid=8307). Note that altitude will be ignored.
select col1,col2,etc
from geom_table
where sdo_relate(geom,mdsys.sdo_geometry(2003,8307,NULL,
mdsys.sdo_elem_info_array(1,1003,1),
mdsys.sdo_ordinate_array(-70.05,40.8, -69.05,40.8, -69.05,41.2, -70.05,41.2, -70.05,40.8)),
'mask=anyinteract querytype=window') = 'TRUE'; -
Need help with the following query
I have the following data
INVOICE_ID PAID_AMT PYMNT_GROSS_AMT DISCOUNT
10151 1375 1375 55
10151DC -44.81 -44.81 0
20017 25 25 7
Ok the data I want to grab the discount field is paid_amt = pymnt_gross_amt and discount <> 0. If however there is another invoice_id out there (same invoice ID except with a DC appended to it like 10151DC) then you want to select the differece between the discount field without the DC and the Invoice ID with the DC the paid_amt field.
So the results would be.
Invoice_ID Discount
10151 10.19
20017 7
Thanks for all your help!Why scan same table twice when it can be achived using single scan :
Hope this helps :
with inv_data as
(select '10151' invoice_id,
1375 paid_amt,
1375 pymnt_gross_amt,
55 discount from dual
union all
select '10151DC' invoice_id,
-44.81 paid_amt,
-44.81 pymnt_gross_amt,
0 discount from dual
union all
select '20017' invoice_id,
25 paid_amt,
25 pymnt_gross_amt,
7 discount from dual)
select replace(invoice_id,'DC') invoice_id,
sum(case when invoice_id like '%DC' then pymnt_gross_amt
else discount end) discount
from inv_data
group by replace(invoice_id,'DC')
INVOICE DISCOUNT
10151 10.19
20017 7
2 rows selected. -
Here is my code , i dont have any experience with writing the nested sql , i got the below code , which needs to be modified adding a case statement which will show util_rate for 2 conditions
1. given in where condition ( to_char(time_stamp,'HH24') >= '09' and to_char(time_stamp,'HH24') <= '19')
2.Apposite to the condition above (to_char(time_stamp,'HH24') < '09'and to_char(time_stamp,'HH24') > '19')
could anybody please help me in adding the 2nd condition to the below query , please share any documentation you have for learning how to write nested sql,
Thank you
select device,time_stamp,
sum(ActiveHRS)/sum(AvailHRS) as RATE
from
select device,time_stamp,
case when usage >0 then 1
else 0 end as ActiveHRS,
'1' as AvailHRS
from
select device,time_stamp,
sum(case
when state = 9 then 0
when state = 0 then 0
else 1 end) as usage
from A
where to_char(time_stamp,'HH24') >= '09'
and to_char(time_stamp,'HH24') <= '19'
and to_char(time_stamp, 'D') in (2,3,4,5,6)
group by device, time_stamp
group by device,time_stampHere is the DDL :
desc rumi_all
Name Null Type
RUMI_DEVICE VARCHAR2(20)
STATE NUMBER(38)
TIME_STAMP DATE
LOCATION VARCHAR2(50) Here is some sample data :
RUMI_DEVICE STATE TIME_STAMP LOCATION
10.45.28.86 0 15-JUN-10 WA-102
10.45.28.51 0 15-JUN-10 WA-102
10.45.28.63 0 15-JUN-10 WA-102
10.45.29.47 9 15-JUN-10 WA-120I used the below query to get the util for the hours 9am - 7pm
select rumi_device,time_stamp,
sum(ActiveHRS)/sum(AvailHRS) as RATE
from
select rumi_device,time_stamp,
case when usage >0 then 1
else 0 end as ActiveHRS,
'1' as AvailHRS
from
select rumi_device,time_stamp,
sum(case
when state = 9 then 0
when state = 0 then 0
else 1 end) as usage
from rumi_all
where to_char(time_stamp,'HH24') >= '09'
and to_char(time_stamp,'HH24') <= '19'
and to_char(time_stamp, 'D') in (2,3,4,5,6)
group by rumi_device, time_stamp
group by rumi_device,time_stamp
Acquired Out for the above query :
RUMI_DEVICE TIME_STAMP UTIL_RATE
10.45.29.47 15-JUN-10 0.234
10.45.28.63 15-JUN-10 0.123
10.45.29.47 15-JUN-10 0.987
10.45.29.47 16-JUN-10 0.23Desired output :I want 2 extra columns which shows util rate for the above condition i.e 9am - 7pm(core hours) and also opposite to that condition after 7pm - before 9am(say, non core hours)
Desired out put :
RUMI_DEVICE TIME_STAMP Core_Util_Rate Non_Core_UtilRate
10.45.29.4 15-JUN-10 0.234 0.003
10.45.28.63 15-JUN-10 0.123 0.001
10.45.29.47 15-JUN-10 0.987 0.023
10.45.29.47 16-JUN-10 0.23 0Hope this helps in answering my question , and also could you please share some document to learn writing nested sql's , i always had tough time in understanding this :-(
Maybe you are looking for
-
How do i move a data file from my pc to my ipad
How do I move a data file from my computer to my ipad? It is my product catalogue and it would help if it were on my ipad.
-
Hi All, i need to select the bkpf table with OR condition. example Select * from bkpf where and ledger group is either 0L or initial. kindly help me with the same. i have tried with creating a range table and populating the values 0L an
-
Creation of payment terms on for payment on instalment basis trans OBB8
Hi I have a few doubts in creation of payment terms 10% - advance payment - 60 days invoice date 65% - on shipment of goods - 60 days invoice date 20% - on receipt of final documentation - 60 days invoice date my doubt is do i need to consider rema
-
How to send a digital signature across sockets ?
i have wriiten java code for client server communication - the client sends a digital signature and the server verifies it using the public key .I have sent the signature as a string from the client to server.although the verification comes as true m
-
Hello All, Can anyone please let me know the meaning and usage of "Day Limit" with a business example please. Thank you, Srinivas