Find records in the date range
HelloI have the following data
with t as (
select 1234 prod_id, to_date('01-Jan-2008', 'dd-MON-yyyy') start_date, to_date('01-May-2012', 'dd-MON-yyyy') end_date
from dual union
select 4567 prod_id, to_date('01-Aug-2007', 'dd-MON-yyyy') start_date, to_date('01-Apr-2012', 'dd-MON-yyyy') end_date
from dual union
select 8910 prod_id, to_date('01-Jul-2006', 'dd-MON-yyyy') start_date, to_date('01-Mar-2012', 'dd-MON-yyyy') end_date
from dual
)
SELECT *
FROM t
What is the best way to find all records in April 1, 2012 and April 30, 2012?Concerning
Assuming that you are looking for cumulation ranges
SELECT *
FROM t
WHERE start_date BETWEEN date '2012-04-01' and date '2012-04-30'
OR end_date BETWEEN date '2012-04-01' and date '2012-04-30'
OR ( start_date < date '2012-04-01'
AND end_date > date '2012-04-30' )
who produces the two lines expected
SQL> with t as (
2 select 1234 prod_id, to_date('01-Jan-2008', 'dd-MON-yyyy') start_date, to_date('01-May-2012', 'dd-MON-yyyy') end_date
3 from dual union
4 select 4567 prod_id, to_date('01-Aug-2007', 'dd-MON-yyyy') start_date, to_date('01-Apr-2012', 'dd-MON-yyyy') end_date
5 from dual union
6 select 8910 prod_id, to_date('01-Jul-2006', 'dd-MON-yyyy') start_date, to_date('01-Mar-2012', 'dd-MON-yyyy') end_date
7 from dual
8 )
9 SELECT *
10 FROM t
11 WHERE start_date BETWEEN date '2012-04-01' and date '2012-04-30'
12 OR end_date BETWEEN date '2012-04-01' and date '2012-04-30'
13 OR ( start_date < date '2012-04-01'
14 AND end_date > date '2012-04-30' );
PROD_ID START_DAT END_DATE
---------- --------- ---------
1234 01-JAN-08 01-MAY-12
4567 01-AUG-07 01-APR-12
Justin
Tags: Database
Similar Questions
-
Get number of records in the date range - IDE: PLSQL Developer
I want to count the number of records of members who register within a date range specified, based on effective and expiration dates and their "elg_code". I posted the SQL code for some examples of data. What I would like to see returned is in three columns of the counties where the eff_date date_exp members fall within the date range specified by the SQL and have an Elg_code of ' ' (space).
So what I would like is all members with elg_code ' ' where he eff_dt and exp_dt range is April 2012, 2012 MAY & JUN 2012. Thus, according to data from the sample I posted, Mark, where his elg_code record is ' ', his eff_dt is 01/01/2011 and April 2012 (30/04/2012) is his exp_dt. Range of the brand statement may 2012, but not MAY or JUNE of 2012. Marty would tally for the APR and MAY because his eff_dt is before MAY 2012 and his exp to MAY 2012. etc...
According to the data below, the results should resemble:
APR MAY JUN
4-3-2
APR should have FRANK, MARK, MARTY, MARY.
MAY should have FRANK, MARTY, MARY
JUN should have FRANK and MARIE
NOAM and JOHN should not appear as his records with elg_code ' ' have no documents eff_dt and exp_dt which are April-June 2012.
So what I tried without success as it appears that I have a kind of Cartesian question (?), is:
Select count (m1.mbr_name) APR,
Count (m2.mbr_name) MAY,
Count (m3.mbr_name) JUN
mbr2 M1,
mbr2 m2,
mbr2 m3
"where m1.eff_dt < ' 01 - may - 2012"
"and m1.exp_dt > ' 01-Apr-2012.
and m1.elg_code = ' '
"and m2.eff_dt < 1 June 2012"
"and m2.exp_dt > ' 01 - may - 2012"
and m2.elg_code = ' '
"and m3.eff_dt < 1 July 2012"
"and m3.exp_dt > 1 June 2012"
and m3.elg_code = ' '
Here's the DML
Thanks for any help!
create table mbr2 (mbr_name varchar (10), varchar (1) grpid eff_dt date, date of exp_dt elg_code varchar (1))
Commit
insert into mbr2 values ('BRAND', 'A', to_date (January 1, 2011 ',' DD-MM-YYYY '), to_date (April 30, 2012 ',' DD-MM-YYYY '), ' ')
insert into mbr2 values ('BRAND', 'A', to_date (May 1, 2012 ',' DD-MM-YYYY '), to_date (31 December 2013 ',' DD-MM-YYYY '), 'C')
insert into mbr2 values ('MARTY', 'A', to_date (January 1, 2011 ',' DD-MM-YYYY '), to_date (May 31, 2012 ',' DD-MM-YYYY '), ' ')
insert into mbr2 values ('MARTY', 'A', to_date (June 1, 2012 ',' DD-MM-YYYY '), to_date (31 December 2013 ',' DD-MM-YYYY '), 'C')
insert into mbr2 values ('FRANK', 'B', to_date (January 1, 2011 ',' DD-MM-YYYY '), to_date (June 30, 2012 ',' DD-MM-YYYY '), ' ')
insert into mbr2 values ('FRANK', 'B', to_date (July 1, 2012 ',' DD-MM-YYYY '), to_date (31 December 2013 ',' DD-MM-YYYY ""), 'C')
insert into mbr2 values ('MARY', 'B', to_date (January 1, 2011 ',' DD-MM-YYYY '), to_date (June 30, 2012 ',' DD-MM-YYYY '), ' ')
insert into mbr2 values ('MARY', 'B', to_date (July 1, 2012 ',' DD-MM-YYYY '), to_date (31 December 2013 ',' DD-MM-YYYY ""), 'C')
insert into mbr2 values ('JOHN', 'C', to_date (January 1, 2011 ',' DD-MM-YYYY '), to_date (July 1, 2011 ',' DD-MM-YYYY '), ' ')
insert into mbr2 values ('JOHN', 'C', to_date (July 1, 2011 ',' DD-MM-YYYY '), to_date (1 January 2012 ',' DD-MM-YYYY ""), 'C')
insert into mbr2 values ("NOAM" 'd', to_date (July 1, 2012 ',' DD-MM-YYYY '), to_date (31 December 2013 ',' DD-MM-YYYY '), ' ' ")
CommitThis gives you a report for the current month and the two front. Column header must be adjusted ;-)
select count( case when eff_dt < add_months(trunc(sysdate,'MM'), -1) and exp_dt >= add_months(trunc(sysdate,'MM'), -2) then 1 end) April , count( case when eff_dt < add_months(trunc(sysdate,'MM'), 0) and exp_dt >= add_months(trunc(sysdate,'MM'), -1) then 1 end) May , count( case when eff_dt < add_months(trunc(sysdate,'MM'), 1) and exp_dt >= add_months(trunc(sysdate,'MM'), 0) then 1 end) June from mbr2 where elg_code = ' ' and eff_dt < add_months(trunc(sysdate,'MM'), 1) and exp_dt >= add_months(trunc(sysdate,'MM'), -2) APRIL MAY JUNE 4 3 2
-
SUM (case use this structure to get average values on the date range
I use:
Oracle SQL Developer (3.0.04) build hand - 04.34 Oracle Database 11 g Enterprise Edition 11.2.0.1.0 - 64 bit Production
How do we use the function sum with a structure of matter inside.
so I gave that looks like have an ID, date and value. I'm looking to get the day 7 medium for the date range of 04/01/2013 to 20/04/2013
* Please let me know if the table does not load.with t as ( select 1 ID_Key,to_date('4/1/2013','mm-dd-yyyy') date_val, 10 Value_num from dual union all select 1 ID_key,to_date('4/2/2013','mm-dd-yyyy'), 15 from dual union all select 1 ID_key,to_date('4/3/2013','mm-dd-yyyy'), 20 from dual union all select 1 ID_key,to_date('4/5/2013','mm-dd-yyyy'), 0 from dual union all select 1 ID_key,to_date('4/8/2013','mm-dd-yyyy'), 12 from dual union all select 1 ID_key,to_date('4/9/2013','mm-dd-yyyy'), 8 from dual union all select 1 ID_key,to_date('4/10/2013','mm-dd-yyyy'), 6 from dual union all select 1 ID_key,to_date('4/12/2013','mm-dd-yyyy'), 10 from dual union all select 1 ID_key,to_date('4/13/2013','mm-dd-yyyy'), 0 from dual union all select 1 ID_key,to_date('4/14/2013','mm-dd-yyyy'), 0 from dual union all select 1 ID_key,to_date('4/15/2013','mm-dd-yyyy'), 10 from dual union all select 1 ID_key,to_date('4/16/2013','mm-dd-yyyy'), 5 from dual union all select 1 ID_key,to_date('4/17/2013','mm-dd-yyyy'), 2 from dual union all select 1 ID_key,to_date('4/20/2013','mm-dd-yyyy'), 3 from dual union all select 2 ID_key,to_date('4/3/2013','mm-dd-yyyy'), 12 from dual union all select 2 ID_key,to_date('4/5/2013','mm-dd-yyyy'), 15 from dual union all select 2 ID_key,to_date('4/6/2013','mm-dd-yyyy'), 5 from dual union all select 2 ID_key,to_date('4/7/2013','mm-dd-yyyy'), 7 from dual union all select 2 ID_key,to_date('4/9/2013','mm-dd-yyyy'), 10 from dual union all select 2 ID_key,to_date('4/11/2013','mm-dd-yyyy'), 5 from dual union all select 2 ID_key,to_date('4/12/2013','mm-dd-yyyy'), 0 from dual union all select 2 ID_key,to_date('4/13/2013','mm-dd-yyyy'), 0 from dual union all select 2 ID_key,to_date('4/15/2013','mm-dd-yyyy'), 6 from dual union all select 2 ID_key,to_date('4/16/2013','mm-dd-yyyy'), 8 from dual union all select 2 ID_key,to_date('4/17/2013','mm-dd-yyyy'), 0 from dual union all select 2 ID_key,to_date('4/18/2013','mm-dd-yyyy'), 10 from dual union all select 2 ID_key,to_date('4/19/2013','mm-dd-yyyy'), 5 from dual )
I would get the average of 7 days, as long as there is date for the rank of enough previous dates, is it not, then it returns a null value.
the results should look like this
As you can see, there are gaps in the dates, the value is then processed by zeros for the 7Day_Avg and then ignored for the 7Day_Avg2 (not counted in the number of days on average do to no valu_num line)ID_Key date_val Value_num 7Day_Avg 7Day_Avg2 1 4/1/2013 10 null null 1 4/2/2013 15 null null 1 4/3/2013 20 null null 1 4/5/2013 0 null null 1 4/8/2013 12 6.71 11.75 1 4/9/2013 8 5.71 10.00 1 4/10/2013 6 3.71 6.50 1 4/12/2013 10 5.14 9.00 1 4/13/2013 0 5.14 7.20 1 4/14/2013 0 5.14 6.00 1 4/15/2013 10 4.86 5.67 1 4/16/2013 5 4.42 5.17 1 4/17/2013 2 3.85 4.50 1 4/20/2013 3 2.86 4.00 2 4/3/2013 12 null null 2 4/5/2013 15 null null 2 4/6/2013 5 null null 2 4/7/2013 7 5.57 9.75 2 4/9/2013 10 7.00 9.80 2 4/11/2013 5 6.00 8.40 2 4/12/2013 0 3.86 5.40 2 4/13/2013 0 3.14 4.40 2 4/15/2013 6 3.00 4.20 2 4/16/2013 8 2.71 3.80 2 4/17/2013 0 2.71 3.17 2 4/18/2013 10 3.43 4.00 2 4/19/2013 5 4.14 4.83
I tried something like this at first, but becomes "missing keyword" error
Should I have the structure outside the sum function?select t.*/, sum( case when date_val between :day2 - 6 and :day2 then value_num between date_val - 6 and date_val else null end ) as 7Day_avg form t
Any thoughts?
Published by: 1004407 on June 7, 2013 11:06Hello
If you want to calculate the average of the last 7 days, including the current day, then then RANGE should be 6 PRIOR, not 7.
Try this:
WITH got_min_date_val AS
(
SELECT id_key, date_val, value_num
MIN (date_val) compared to (AS min_date_val)
T
WHERE the date_val BETWEEN TO_DATE (April 1, 2013 ', "dd-mm-yyyy")
AND TO_DATE (April 20, 2013 ', "dd-mm-yyyy")
)
SELECT id_key, date_val, value_num
CASE
WHEN date_val > = min_date_val + 6
THEN SUM (value_num) OVER (PARTITION BY id_key
ORDER BY date_val
PRIOR TO TIER 6
)
/ 7
END AS avg_7_day
CASE
WHEN date_val > = min_date_val + 6
THEN AVG (value_num) OVER (PARTITION BY id_key
ORDER BY date_val
PRIOR TO TIER 6
)
END AS avg_7_day_2
OF got_min_date_val
ORDER BY id_key
date_val
;
Output:
ID_KEY DATE_VAL VALUE_NUM AVG_7_DAY AVG_7_DAY_2
---------- --------- ---------- ---------- ------------
1 1 APRIL 13 10
1 2 APRIL 13 15
1 APRIL 3, 13 20
1 5 APRIL 13 0
1 APRIL 8, 13 12 6.71 11.75
1 APRIL 9, 13 8 5.71 10.00
1 APRIL 10 13 6 3.71 6.50
1 12 APRIL 13 10 5.14 9,00
1 13 APRIL 13 0 5,14 7.20
1 14 APRIL 13 0 5,14 6.00
1 15 APRIL 13 10 4.86 5.67
1 16 APRIL 13 5 4.43 5.17
1 APRIL 17, 13 2 3.86 4.50
1 APRIL 20, 13 3 2.86 4.00
2 APRIL 3, 13 12
2 5 APRIL 13 15
2 6 APRIL 13 5
2 7 APRIL 13 7 5.57 9.75
2 9 APRIL 13 10 7,00 9.80
2 11 APRIL 13 5 6.00 8.40
2 12 APRIL 13 0 3.86 5.40
2 13 APRIL 13 0 3.14 4.40
2 15 APRIL 13 6 3.00 4.20
2 16 APRIL 13 8 2.71 3.80
2 17 APRIL 13 0 2.71 3.17
2 18 APRIL 13 10 3.43 4.00
2 APRIL 19, 13 5 4.14 4,83
Post edited by: FrankKulash
Sorry; I wanted to respond to OP, not Greg
-
On the date ranges in search of oracle forms
I use service number, name, type person and date as search criteria in the custom form ranges.
When I enter the employee number, press the search button, I get the exact info in the block of result.
Result block contains
name of the employee, personid, emp numbed, org, start_date.
Similarly when I enter the employee number, dept, I get the correct values.
My question is, when I enter the date range. IAM unable to filter the data.
When I enter START_DATE between nvl(:BLOCKNAME.) Start_date, 1 January 1901 ') and nvl(:BLOCKNAME.) End_date, 31-DEC-4712') where block clause in the result. I had data for the range of dates also.
If I give condition in where clause results take so long when I search with the name of the employee, number, dept, person type.
If I have a query with the date, the persormance is good.
Think you know everything, how it prevents START_DATE between nvl(:BLOCKNAME.) Start_date, 1 January 1901 ') and nvl(:BLOCKNAME.) End_date, 31-DEC-4712') when look us with the employee's name, number, dept, person type.So leave the WHERE clause of your empty block and put something like the following in your search button:
IF :BLOCK.START_DATE IS NOT NULL OR :BLOCK.END_DATE IS NOT NULL THEN SET_BLOCK_PROPERTY('YOURBLOCK', ONETIME_WHERE, 'START_DATE between nvl(:BLOCKNAME.START_DATE,TO_DATE(''01-JAN-1901'', ''DD-MON-YYYY'')) and nvl(:BLOCKNAME.END_DATE,TO_DATE(''31-DEC-4712'', ''DD-MON-YYYY''))'); END IF;
-
Cannot find record during the update on the date of
TABLE CRAM_STG:
Update:ID VARCHAR2(25 BYTE) ITEM_NO VARCHAR2(6 BYTE) NOMEN VARCHAR2(28 BYTE) CHGNBR VARCHAR2(3 BYTE) UI VARCHAR2(5 BYTE) SUPPLYACTIONCODE VARCHAR2(2 BYTE) QTY VARCHAR2(5 BYTE) ACCT VARCHAR2(5 BYTE) SUBACCT VARCHAR2(1 BYTE) REQUISITIONTYPE VARCHAR2(1 BYTE) REQUISITIONDATE DATE RECEIPTDATE DATE PROCESSDATE DATE ESTIMATEDSHIPDATE VARCHAR2(10 BYTE) ZIPCODE VARCHAR2(5 BYTE) CENTERCODE VARCHAR2(1 BYTE) ORDRNBR VARCHAR2(14 BYTE)
v_order_date: = to_date (CRAM_UPD_REC. ORDER_DATE, "MM/DD/YY").
During a select statement without the dateUPDATE CRAM_STG SET CRAM_STG.ORDRNBR = CRAM_UPD_REC.ORDER_NBR, CRAM_STG.ESTIMATEDSHIPDATE = CRAM_UPD_REC.SHIP_DATE WHERE CRAM_STG.acct = CRAM_UPD_REC.ACCT and CRAM_STG.subacct = CRAM_UPD_REC.SUBACCOUNT and CRAM_STG.item_no = CRAM_UPD_REC.ITEM_NO and CRAM_STG.qty = CRAM_UPD_REC.ORDER_QTY and CRAM_STG.requisitiondate = v_order_date ;
But my problem is when you use the date which is varchar type convert to date, it does not find the file.select REQUISITIONDATE from cram_stg where acct = '39249' and ((subacct = ' ' ) OR subacct is null) and item_no = '131249' and qty = to_number('00001','99999'); OUTPUT: REQUISITIONDATE ------------------------- 04-OCT-11
select REQUISITIONDATE from cram_stg where acct = '39249' and ((subacct = ' ' ) OR subacct is null) and item_no = '131249' and qty = to_number('00001','99999') and requisitiondate = to_date('10/04/11', 'MM/DD/YY'); REQUISITIONDATE -------------------------
mlojan wrote:
ALTER session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss ";
change the session succeeded.REQUISITIONDATE
-------------------------
October 4, 2011 01:30:21Then he can easily explain why it cannot be equal to your function to_date (...) that does not include a default time (h: min: sec = 00:00:00).
So, you can try trunc (requisitiondate) = to_date (...) instead.
TRUNC is suppose to give up the time portion of the date up to 00:00:00.Nicolas.
-
AMOUNT of Oracle with the date range
Hello community,
I'm having a problem with the addition of a field with a date range. It comes to my table
JVREF VARCHAR2 10 - - - - - - SOURCE VARCHAR2 2 - - - - - - PERIOD VARCHAR2 6 - - - - - - JVDATE NUMBER - 38 0 - Nullable - - GLCODE VARCHAR2 24 - - - - - - DESCR VARCHAR2 40 - - - Nullable - - AMOUNT_0 FLOAT 48 48 - - Nullable - - AMOUNT_1 FLOAT 48 48 - - Nullable - - JVTYPE VARCHAR2 4 and I'm glad the the following statement works as expected
SELECT AMOUNT_1 FROM 'TABLE' where
TO_DATE ("PERIOD, ' YYYYMM") > = to_date ("'201501 ',' YYYYMM")
and
TO_DATE (PERIOD, 'YYYYMM') < = to_date ("'201502 ',' YYYYMM");
E.g.
AMOUNT_1
56192.48
59863.57
48570.1
72407.12
21626.96
35532.96
75860.67
25623.62
54799.83
16872.3
The next thing I want to do is the sum of these amounts... so I changed my statement to become
SELECT SUM (AMOUNT_1) 'TABLE' where
TO_DATE ("PERIOD, ' YYYYMM") > = to_date ("'201501 ',' YYYYMM")
and
TO_DATE (PERIOD, 'YYYYMM') < = to_date ("'201502 ',' YYYYMM");
and now I'm getting
ORA-01841: (full) year must be between-4713 and 9999 and not 0
I also tried
SELECT THE PERIOD (AMOUNT_1) SUM OF "BRE". "' OPW_NMLTRX ' where
TO_DATE ("PERIOD, ' YYYYMM") > = to_date ("'201501 ',' YYYYMM")
and
TO_DATE (PERIOD, 'YYYYMM') < = to_date ("'201502 ',' YYYYMM")
Group by PERIOD
with the same results... I can't figure out what I should do next?
Thank you.
Hello
Solomon Yakobson says:
Question:
SELECT *.
From your_table
WHERE the TO_NUMBER (SUBSTR (PERIOD, 1, 4)) NO BETWEEN-4713 and 9999
OR TO_NUMBER (SUBSTR (PERIOD, 1, 4)) = 0
/
To find the offending rows.
SY.
This can cause other errors, according to what is in this column. A better way would be something like:
Primary_key SELECT, period - add more columns you want
'TABLE' - avoid names which need quotation marks
(Period WHERE the TRANSLATION)
'012345678'
'999999999'
) <> = "999999"
OR SUBSTR (period, 1, 4), not BETWEEN "1900" AND "2099"
OR SUBSTR (period 5) NOT BETWEEN '01' to '12'
;
Now there may be errors of conversion, because there is no conversion.
-
How to delete a record in the data store VMware
Hello
First VM4 & VM5 is migrated during the execution of the migration of the VM20, sort of migration of VM4 & VM5 failed a few minutes later. But VM4 folder could be seen under backup2 datastore. When VM4 is migrated again once finished VM20 migration, VM4_1 record can be seen in the data backup2 store. And VM4 folder includes a DB_backup - flat hard file.
So I have a few questions:
(1) how can I remove the VM4 because it's useless? Should I delete file DB_backup - flat hard and then delete the folder VM4? But I can't find measures to remove the VM4 folder in the store of data backup2. Who can provide the steps?
(2) how can I rename the folder VM4_1 to VM4 name?
Thank you!
Thanks Andre for clarification. Yes, even if the file can be renamed when the VM is turned on but this will lead to issues if we want to migrate the virtual computer to the another data store or if we stop & try to turn on. So please do not rename folder when the virtual machine is running.
Second approach will work fine. Renaming that is to display the name of the computer virtual, then SVMotion in another data store & and then you can bring the virtual machine to the previous data store.
Reference:VMware KB: rename a virtual machine and VMware ESXi and ESX records
-
Conditional formatting depends on the date ranges
Basically, I want to be able to enter a date in column A and a sum of money in the B column, depending on where the date in column A grave in a date range, I want the money in column B to copy to a corresponding column. Is this possible? The only questions I found on here deal in a conditional formatting with dates have to do with derivative.
Thank you
Julio
I hope this help to clarify for you...
It is not bringing conditional formatting. Formatting conditional would change the format of a cell (or cells)... as the font, color, size, color cell background, or other formatting character is tics of a cell based on the contents of the cell
You ask about including of the value of a cel another beach under certain conditions
Here is an example:
The first three rows are header lines.
You must enter a valid date for the towing job. Using the format "mm/dd/yyyy".
C4 = IF (AND (DATEVALUE (A4) ≥DATEVALUE($B$1), DATEVALUE (A4) ≤DATEVALUE($B$2)), B4, "")
It's shorthand dethrone select cell C4, and type (or copy and paste it here) the formula:
= IF (AND (DATEVALUE (A4) ≥DATEVALUE($B$1), DATEVALUE (A4) ≤DATEVALUE($B$2)), B4, "")
Select the cell C4, copy
Select cells C4 at the end of the C column, paste
-
The smart Albums based on the date range cause app Crash Photos
While I'm setting up a new Smart Album based on day of photos between 12/01/2015 and 31/12/2015 the Photos app closes with a crash. Cannot set the second date (the end date for this album). However, I can easily create a new Smart Album for next month (01/01/2016 and 01/31/2016). I create smart Albums, because the new Photos app does not like the old iPhoto does with my Photos from the photo gallery.
How can I solve this? I don't have an album of December...? !
You are in an area where the date format is different from the United States? Earlier this year, we have seen small business issues have reported that rules for smart albums date range do not work with the primary language set to French or German.
Try to change the primary system language to English with an English date format. Photos could be trying to read the 12/31/2015 as the 12th day of the month 31.
Or use a different date based on 'before' rule and after.
-
To ignore the date ranges that overlap
Hi guys,.
I have the tables below
Periods
START_DATE END_DATE ID 30-SEP-05 13 OCTOBER 05 1 12 OCTOBER 05 14 NOVEMBER 05 2 15 NOVEMBER 05 15 DECEMBER 05 3 T1
DAT_COL ID AMOUNT 11 OCTOBER 05 1 10 12 OCTOBER 05 1 10 16 NOVEMBER 05 1 10 I need to ignore the remaining date range if it overlaps when comparing dat_col from T1 between the dates of beginning and end of periods table. Always need to consider the first periods
output something like this
ID ID_1 START_DATE END_DATE DAT_COL 1 1 30-SEP-05 13 OCTOBER 05 11 OCTOBER 05 1 1 30-SEP-05 13 OCTOBER 05 12 OCTOBER 05 1 3 15 NOVEMBER 05 15 DECEMBER 05 16 NOVEMBER 05 I use query
Select a.id, b.id, b.start_date, b.end_Date, a.DAT_COL from T1 a, (select id, start_date, end_date periods) b
where a.dat_col between b.start_Date and b.end_Date
Group of a.id, b.id, b.start_date, b.end_Date, a.dat_col
order of b.start_date;
ID ID_1 START_DATE END_DATE DAT_COL 1 1 30-SEP-05 13 OCTOBER 05 11 OCTOBER 05 1 1 30-SEP-05 13 OCTOBER 05 12 OCTOBER 05 1 2 12 OCTOBER 05 14 NOVEMBER 05 12 OCTOBER 05 1 3 15 NOVEMBER 05 15 DECEMBER 05 16 NOVEMBER 05 Test case:
CREATE TABLE 'PERIODS '.
("START_DATE" DATE,
"END_DATE" DATE,
'ID '.
) ;
Insert into periods (start_date, end_date, ID) values (to_date('30-SEP-05','DD-MON-RR'),to_date('13-OCT-05','DD-MON-RR'),1);
Insert into periods (start_date, end_date, ID) values (to_date('12-OCT-05','DD-MON-RR'),to_date('14-NOV-05','DD-MON-RR'),2);
Insert into periods (start_date, end_date, ID) values (to_date('15-NOV-05','DD-MON-RR'),to_date('15-DEC-05','DD-MON-RR'),3);
Insert into T1 (DAT_COL, ID) values (to_date('11-OCT-05','DD-MON-RR'), 1);
Insert into T1 (DAT_COL, ID) values (to_date('12-OCT-05','DD-MON-RR'), 1);
Insert into T1 (DAT_COL, ID) values (to_date('16-NOV-05','DD-MON-RR'), 1);
CREATE TABLE 'T1 '.
(DATE OF THE 'DAT_COL',
'ID '.
);
Hello
If you really want to use something close to what you posted, then you can do it like this:
WITH got_r_num AS
(
SELECT a.id
b.id AS id_1
b.start_date
b.end_date
a.dat_col
, ROW_NUMBER () OVER (PARTITION BY a.id, a.dat_col)
ORDER BY b.start_date, b.end_date
) AS r_num
FROM one t1
, (
SELECT id, start_date, end_date
Periods
) b
WHERE a.dat_col BETWEEN b.start_date
AND b.end_date
GROUP BY a.id, b.end_date, a.dat_col, b.start_date and b.id
)
SELECT id, id_1, start_date, end_date, dat_col
OF got_r_num
WHERE r_num = 1
ORDER BY start_date
;
Note that the WITH clause, that's essentially what you posted in your first post (with the added r_num column) and the main request is essentially the same as in response #1.
But why would you do something like that? View online or GROUP BY allows all. If you remove them, you get the #1 response solution.
-
How to calculate the periods that overlap between two or more given the date range?
Hi all
If there are several durations then how we can calculate the period of time that overlap between these times.
For example: for 3 time periods. 03/12/2015-16/08/2015, 05/01/2015 to 31/07/2015 and the 06/09/2015 to 30/11/2015, how the overlap period can be calculated?
There are many potential unknowns in your question. For example, you want to count any overlap at all? If two dates overlap, what matters? Overlap - each of them?
In any case, here is a solution that counts how many periods are overlapping in any point in time... She, of course, using temporal logic. You can then use ValueAt(), WhenLast(), WhenNext(), etc. as appropriate.
Assume that your model has a child entity called 'the period' with name 'all time periods' relationship and basic attributes 'start date of the period of time' and 'date of end of period of time'.
In your example:
an entity should have the time period start date = 03/12/2015 and the date of end of period of time = 16/08/2015
another entity might have the time period start date = 01/05/2015 and the date of end of period of time = 31/07/2015
another entity might have the time period start date = 06/09/2015 and the date of end of period of time = 30/11/2015
To find the number of overlapping over time, we want to count or entities that have an active period, so the rule is perhaps the sum:
the number of overlapping = the number of all the periods for which it is true that the time period is active
How do we know a time is active? This is the time logic comes in. He is active on or after the start date or no later than the end date:
the time period is active if
TemporalOnOrAfter (the date of beginning of period of time) and
TemporalOnOrBefore (date of end of period of time)
That's all. Now, you can perform a temporal visualization of the 'number of overlapping' and you'll see it rise and fall over time. As a reference, he said that the number of overlapping = 3.0 from 06/09/2015 across 31/07/2015.
I hope this helps. You can use the same model to count periods of time functions, but you end up having to use the most logical date. You of course can count the total number of entities and compare this number of overlap over time to see if they overlap, but I digress...
-
I have ESXi 4.1 and with vSphere Client to manage virtual machines.
Some of my users continue to use the 'remove from inventory"rather than the option" remove disc "in vSphere when they want to delete the virtual machine.
This leaves the computer virtual on the data store but not used. I have since removed this privilege among the offending users but I need to do a bit of cleaning.
I have a lot of files on the data store where users have done this in recent years. Probably about 150 records but only 80 VM listed in the inventory.
Is there a way I can output, a report showing the data of each machine store directory in inventory so that I can remove anything not on this list? ID rather not to manually check the parameters of all 80 VM in the inventory.
Out ideal would be something like:
MyVmNameHere 1, \MyVmDirectoryHere1\ [DataStore1]
MyVmNameHere2, \MyVmDirectoryHere2\ [DataStore1]
A great tool to discover all this and much more is RVTools
André
-
How to get the different records for the date max.
Hi all
Here is the sample sql for sample table and data.
Create table student (dept_id number(10), first_name varchar2(10),last_name varchar2(10),join_date date,years_attended number(10));
insert into student values (1,'Ann','Coleman',to_date('3/7/1917','MM/DD/YYYY'),4);
insert into student values (1,'Ann','Coleman',to_date('3/7/1916','MM/DD/YYYY'),5);
insert into student values (2,'Rock','Star',to_date('1/1/1920','MM/DD/YYYY'),5);
insert into student values (2,'Rock','Star',to_date('1/1/1921','MM/DD/YYYY'),6);
insert into student values (3,'Jack','Smith',to_date('7/1/1900','MM/DD/YYYY'),3);insert into student values (3,'Jack','Smith',to_date('7/1/1901','MM/DD/YYYY'),4);
commit;
I need to get maximum date records when the name and dep_id corresponds to. I wrote the query below and it becomes the expected result, but I'm not sure it's quite effective.
SELECT s.dept_id, s.first_name,s.years_attended
FROM (SELECT dept, MAX (join_date) join_date
STUDENT GROUP BY dept_id) x
Student JOIN s ON x.dept_id = s.dept_id AND x.join_date = s.join_date;
This above query returns records like below, and this is the goal.
DEPT_ID NAME YEARS_ATTENDED
1 Ann 4
2 Rock 6
3 Jack 4
Can you please let me know the query SQL I wrote is effective or not? This sample table may have less data, but I'm dealing with millions of records.
Hello
Thanks for posting CREATE TABLE and INSERT statement. This really helps.
Here's a solution. I also added a name that seems logical. In which case you can delete:
Select dept_id, first_name, last_name
, max (years_attended) Dungeon years_attended (last dense_rank order by join_date)
the student
Group of dept_id, first_name, last_name;
DEPT_ID FIRST_NAME LAST_NAME YEARS_ATTENDED
---------- ---------- ---------- --------------
1 Ann Coleman 4
Rock 2 star 6
3 Jack Smith 4
Kind regards.
Alberto
-
Hi all
I have the following documents:
-Drop Table
drop table agreement;
drop table GRP_INFO;
-Create table
create table agreement
(
Agreement_Id Number (5),
Date of Coverage_Effective_Date,
Date of COVERAGE_termination_date
);
Create Table GRP_INFO
(
Agreement_Id Number (5),
Grp_Id Number (5),
Date of Effective_Date,
Date TERMINATION_DATE
);
-------------Insertion
Insert into the agreement
Select 100,'01 JAN - 2013", December 31, 2013"
From Dual;Insert into the agreement
Select 200,'01 JAN - 2013", December 31, 2013"
From Dual;Insert into the agreement
Select 300,'01 JAN - 2013", December 31, 2013"
From Dual;Insert into the agreement
Select 400,'01 JAN - 2013", December 31, 2013"
From Dual;
----------
Insert into Grp_Info
Select 100.1, 1 January 2013 ", 31 March 2013"
Of the double
UNION ALL
Select 100.2, April 1, 2013 ", April 2, 2013"
Of the double
UNION ALL
Select 100.3, April 3, 2013 ", April 15, 2013"
Of the double
UNION ALL
Select 100.4, April 3, 2013 ", April 15, 2013"
Of the double
UNION ALL
Select 100.5, 1 June 2013 ", December 31, 2013"
Of the double
Union All
Select 200.6, 1 January 2013 ", April 2, 2013"
Of the double
Union All
Select 200,7, April 3, 2013 ", April 15, 2013"
Of the double
Union All
Select 200,8, April 3, 2013 ", April 15, 2013"
Of the double
Union All
Select 200,9, June 1, 2013 ", November 30, 2013"
Of the double
Union All
Select 300,10, 1 January 2013 ", April 15, 2013"
Of the double
Union All
Select 300,11, April 16, 2013 ", December 31, 2013"
Of the double
Union All
Select 400,12, January 2, 2013 ", December 31, 2013"
From Dual;COMMIT;
-------------------
-Queries on the table of the agreement
Select * agree;
-Result of the query
agreement_id coverage_effective_date coverage_termination_date
100 01-JAN-13 31-DEC-13
200 01-JAN-13 31-DEC-13
300 01-JAN-13 31-DEC-13
400 01-JAN-13 31-DEC-13
-----------------------
-Queries on grp_info table
agreement_id grp_id effective_date termination_date
100 1 01-JAN-13 31-MAR-13
100 2 01-APR-13 02-APR-13
100 3 03-APR-13 15-APR-13
100 4 03-APR-13 15-APR-13
100 5 01-JUN-13 31-DEC-13
200 6 01-JAN-13 02-APR-13
200 7 03-APR-13 15-APR-13
200 8 03-APR-13 15-APR-13
200 9 01-JUN-13 30-NOV-13
300 10 01-JAN-13 15-APR-13
300 11 16-APR-13 31-DEC-13
400 12 02-JAN-13 31-DEC-13
-------------
-Result
agreement_id
100
200
400
----------------------
-Logic for the above result
Each agreement_id have several grp_id and grp_id all or at least one should cover all the period agreement_id for example:
-Agreement_id 100 a protection from the date is January 1, 2013 and coverage_termination_date is December 31, 2013, and if you look in all the archives against agreement_id 100 so you can find the period from April 16, 2013 until 31 May 2013 are missing so I need this agreement_id.
-Agreement_id 200 a protection from the date is January 1, 2013 and coverage_termination_date is December 31, 2013, and if you look in all the archives against agreement_id 200 then you can find that the period from December 1, 2013 until 31 December 2013 are missing so I need this agreement_id.
-Agreement_id 300 a protection from the date is January 1, 2013 and coverage_termination_date is December 31, 2013, and if you look in all the archives against agreement_id 300 then you can find that no period is missing, I don't need this agreement_id.
-Agreement_id 400 a protection from the date is January 1, 2013 and coverage_termination_date is December 31, 2013, and if you look in all the archives against agreement_id 300 then you can find that the period from January 1, 2013, until January 1, 2013 is missing, so I need this agreement_id.
--------------
Please let me know if you have any related questions my script and I really appreciate if someone can give me the solution for this problem.
Concerning
Line
Hello
Here's one way:
WITH got_gap AS
(
SELECT agreement_id, effective_date, termination_date
CASE
WHEN effective_date >
1 + MAX (termination_date) OVER (PARTITION BY agreement_id
ORDER BY effective_date
ROWS BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING
)
THEN 1
Difference in the END as the
OF grp_info
)
SELECT g.agreement_id
OF got_gap g
JOIN agreement has ON a.agreement_id = g.agreement_id
GROUP BY g.agreement_id
GIVEN the NUMBER (g.gap) > 0
MIN (g.effective_date) OR > MIN (a.coverage_effective_date)
OR MAX (g.termination_date)< max="">
ORDER BY g.agreement_id
;
Output:
AGREEMENT_ID
------------
100
200
400
Makes no assumptions about effective_date and termination_date, except that effective_date<= termination_date="" on="" each="" row. ="" it's="" okay="" if="" different="" rows="" for="" the="" same="" agreement_id="" overlap,="" or="" if="" one="" encompasses="">=>
Do not attempt to insert VARCHAR2 values (like January 1, 2013 "") in the DATE columns. Use TO_DATE, either DATE literals.
-
Impossible to get Min, Max and median of the values in the date range values
Hello
I had a requirement as to show the data of each charge group of wise men as '< 100' ' 100-199 "" 200-299 "" 300-399 "400-499, 500-599 600-699 700-799 800-899 900-999 > = 1000 '"»
With the query be able to get the count between the beach and the total below. But impossible to get the Min and Max values for this range. For example if the County < 100 is 3 then in these 3, the lowest value is need to display in the min. Idem for Max column also.
In the light of the median value on these values.
Thanks in advance.
Requirement is as below:
State < 100 100-199, 200-299 300-399 400-499, 500-599 600-699 700-799 800-899 900-999 > = 1000 Min Total median Max
AK 1 2 0 4 1 4 4 35 35 4 1 $25 $85 850 $1,200
AL 0 0 2 27 10 17 35 2 2 35 0 $103 100-$1 500 750
* "QUERY ' * '"
WITH t AS
(SELECT 'AL' State, 12 DUAL FROM VALUE
UNION ALL
SELECT 'AL' State, 67 FROM DUAL VALUE
UNION ALL
SELECT 'AL' State, 23 FROM DUAL VALUE
UNION ALL
SELECT 'AL' State, 12 DUAL FROM VALUE
UNION ALL
SELECT 'AL' State, 12 DUAL FROM VALUE
UNION ALL
SELECT 'AL' State, 78 FROM DUAL VALUE
UNION ALL
SELECT 'AL' State, 34 FROM DUAL VALUE
UNION ALL
SELECT 'AL' State, 4 DUAL FROM VALUE
UNION ALL
SELECT 'AL' State, 12 DUAL FROM VALUE
UNION ALL
SELECT 'AL' State, 15 VALUE FROM DUAL
UNION ALL
SELECT "AZ" State, FROM DUAL VALUE 6
UNION ALL
SELECT "AZ" State, 123 FROM DUAL VALUE
UNION ALL
SELECT "AZ" State, 123 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 23 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 120 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 456 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 11 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 24 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 34 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 87 DUAL FROM VALUE
UNION ALL
SELECT 'MY' State, 23 FROM DUAL VALUE
UNION ALL
SELECT 'MY' State, 234 DUAL FROM VALUE
UNION ALL
SELECT 'MY' State, 789 FROM DUAL VALUE
UNION ALL
SELECT "HD" State, VALUE FROM DUAL 54321).
-End of test data
AS T1
(SELECT State,
NVL (COUNT (DECODE (VALUE, 0, 0)), 0) '< 100 ',.
NVL (COUNT (DECODE (VALUE, 1, 1)), 0) '100-199.
NVL (COUNT (DECODE (VALUE, 2, 2)), 0) '200-299.
NVL (COUNT (DECODE (VALUE, 3, 3)), 0) '300-399.
NVL (COUNT (DECODE (VALUE, 4, 4)), 0) '400-499.
NVL (COUNT (DECODE (VALUE, 5, 5)), 0) '500-599,'
NVL (COUNT (DECODE (VALUE, 6, 6)), 0) '600-699.
NVL (COUNT (DECODE (VALUE, 7, 7)), 0) '700-799.
NVL (COUNT (DECODE (VALUE, 8, 8)), 0) '800-899.
NVL (COUNT (DECODE (VALUE, 9, 9)), 0) '900-999. "
NVL (COUNT (DECODE (VALUE, 10, 10)), 0) ' > = 1000.
(SELECT STATE,
CASE
WHAT VALUE < 100 THEN 0
WHAT A VALUE BETWEEN 100 AND 199 THEN 1
WHAT VALUE BETWEEN 200 AND 299, THEN 2
WHAT VALUE BETWEEN 300 AND 399 THEN 3
WHAT VALUE BETWEEN 400 AND 499 THEN 4
WHAT VALUE BETWEEN 500 AND 599 5 THEN
WHAT VALUE BETWEEN 600 AND 699 6 THEN
WHAT VALUE BETWEEN 700 AND 799 THEN 7
WHAT VALUE BETWEEN 800 AND 899 8 THEN
WHAT VALUE FROM 900 TO 999 9 THEN
WHAT VALUE > = 10 THEN 1000
END
VALUE
T)
GROUP BY State)
SELECTION STATE,
"< 100."
"100-199.
"200 299",
"300-399.
"400-499.
'500-599,'
"600-699.
"700-799.
"800-899.
"900-999."
"> = 1000."
'< 100 '.
+ "100-199.
+ "200-299.
+ '300-399.
+ '400-499.
+ "500-599.
+ '600-699.
+ "700-799.
+ "800-899.
+ '900-999 ".
+ ' > = 1000.
in total,.
less ("< 100",)
"100-199.
"200 299",
"300-399.
"400-499.
'500-599,'
"600-699.
"700-799.
"800-899.
"900-999."
("> = 1000 ') min_val,.
largest ("< 100",)
"100-199.
"200 299",
"300-399.
"400-499.
'500-599,'
"600-699.
"700-799.
"800-899.
"900-999."
("> = 1000 ') max_val
FROM t1
/Why not keep it simple?
WITH t AS (SELECT 'AL' state, 12 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 67 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 23 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 12 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 12 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 78 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 34 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 4 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 12 VALUE FROM DUAL UNION ALL SELECT 'AL' state, 15 VALUE FROM DUAL UNION ALL SELECT 'AZ' state, 6 VALUE FROM DUAL UNION ALL SELECT 'AZ' state, 123 VALUE FROM DUAL UNION ALL SELECT 'AZ' state, 123 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 23 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 120 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 456 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 11 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 24 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 34 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 87 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 23 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 234 VALUE FROM DUAL UNION ALL SELECT 'MA' state, 789 VALUE FROM DUAL UNION ALL SELECT 'MH' state, 54321 VALUE FROM DUAL) SELECT state , NVL( COUNT( case when VALUE < 100 then 0 end ), 0 ) "<100" , NVL( COUNT( case when VALUE between 100 and 199 then 0 end ), 0 ) "100-199" , NVL( COUNT( case when VALUE between 200 and 299 then 0 end ), 0 ) "200-299" , NVL( COUNT( case when VALUE between 300 and 399 then 0 end ), 0 ) "300-399" , NVL( COUNT( case when VALUE between 400 and 499 then 0 end ), 0 ) "400-499" , NVL( COUNT( case when VALUE between 500 and 599 then 0 end ), 0 ) "500-599" , NVL( COUNT( case when VALUE between 600 and 699 then 0 end ), 0 ) "600-699" , NVL( COUNT( case when VALUE between 700 and 799 then 0 end ), 0 ) "700-799" , NVL( COUNT( case when VALUE between 800 and 899 then 0 end ), 0 ) "800-899" , NVL( COUNT( case when VALUE between 900 and 999 then 0 end ), 0 ) "900-999" , NVL( COUNT( case when VALUE >= 1000 then 0 end ), 0 ) ">=100" , count( value ) "total" , min( VALUE ) "min" , max( VALUE ) "max" , avg( VALUE ) "avg" , median( value ) "median" from t group by state
Maybe you are looking for
-
Compaq mini cq10: Necesito ayuda para quitar UN enter current password?
one compaq mini cq10 series cnu01326b8 You can help me?
-
Unable to connect to wireless error: DNS server your may be unavailable
Original title: DNS server your may be unavailable I can't connect wireless but I not see my wireless network connection signal works well. When I diagnose the connection, it is said that the DNS server may have problems. My DNS server may be unavai
-
Why send me a message that I was victim of software COUNTERFEITING?
Directting keept Microsoft connect to windows live ID and whenever I did, I lost my primery email, so the last time that microsoft requires windows live on me, I ask them I want my hotmail account, after a lot of issue of your restored Edition of my
-
ERR # 80070645 Installed DSL-now windows security updates all the fail Thank you!
-
Update problem (Windows XP)
Automatic update of windows every day keeps updating. Even if I put it at the weekend only he keeps updating even during the week. It still have the same update content. Here is the content (in order): Office-KB980470 Windows Xp-KB977816KB978338KB979