SqlQuery Help [date range]
Database: Oracle 10g
Table: SOURCE_TABLE
#of records: 500k
Primary Key: ID, EFF_DATE
Data/Table:
with SOURCE_TABLE AS
(select 'P1' AS ID, TO_DATE('03/01/2012','MM/DD/YYYY') AS EFF_DATE, 'V1' AS VALUE1, 'V2' AS VALUE2 FROM DUAL
UNION ALL
select 'P1' AS ID, TO_DATE('02/01/2012','MM/DD/YYYY') AS EFF_DATE, 'V3' AS VALUE1, 'V24' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID, TO_DATE('01/01/2012','MM/DD/YYYY') AS EFF_DATE, 'V10' AS VALUE1, 'V20' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID, TO_DATE('03/01/2012','MM/DD/YYYY') AS EFF_DATE, 'V11' AS VALUE1, 'V21' AS VALUE2 FROM DUAL)
SELECT * FROM SOURCE_TABLE Conditions:
For a given date range i.e. 01/01/2012 to 04/30/2012
what we need is: For each ID, we need part "P" value1 and value2 column values for each specific month between the default date ranges.
In this case it would be Jan-2012, FEB-2012, MAR-2012, APR-2012
If you see below output for P1, there will not be JAN-2012 record as the part P1 is effective from FEB-2012
What i have done so far:
i have the select query basically it is looping through 01/2012 to 04/2012 and for every month,
find out the max eff_date record less then the month that we are computing the value columns for
Output:
with output as
(select 'P1' AS ID , '02/01/2012' AS AS_OF_DATE, 'V3' AS VALUE1, 'V24' AS VALUE2 FROM DUAL
UNION ALL
select 'P1' AS ID , '03/01/2012' AS AS_OF_DATE, 'V1' AS VALUE1, 'V2' AS VALUE2 FROM DUAL
UNION ALL
select 'P1' AS ID , '04/01/2012' AS AS_OF_DATE, 'V1' AS VALUE1, 'V2' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID , '01/01/2012' AS AS_OF_DATE, 'V10' AS VALUE1, 'V20' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID , '02/01/2012' AS AS_OF_DATE, 'V10' AS VALUE1, 'V20' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID , '03/01/2012' AS AS_OF_DATE, 'V11' AS VALUE1, 'V21' AS VALUE2 FROM DUAL
UNION ALL
select 'P2' AS ID , '04/01/2012' AS AS_OF_DATE, 'V11' AS VALUE1, 'V21' AS VALUE2 FROM DUAL
SELECT * FROM OUTPUT;
ID AS_OF_DATE VALUE1 VALUE2
P1 02/01/2012 V3 V24
P1 03/01/2012 V1 V2
P1 04/01/2012 V1 V2
P2 01/01/2012 V10 V20
P2 02/01/2012 V10 V20
P2 03/01/2012 V11 V21
P2 04/01/2012 V11 V21Thanks in advance
Hi,
ora1001 wrote:
Hi frank,
I changed the query to inner join instead of outer join because if a part is not effective for a given month, then i dont need a record.
ex: if P1 EFF_DATE IS 03/01/2012, then i dont need records for JAN, FEB... You're right; inner join is all you need here. My mistake.
What is "P1 EFF_DATE"? Is that the start of the date range you're interested in (January 1, 2012 in your original example)?
Don't you still need to cosider rows before that date? For example, say we want to show the same 4 months (January to April, 2012), but instead of
select 'P2' AS ID, TO_DATE('01/01/2012','MM/DD/YYYY') AS EFF_DATE, 'V10' AS VALUE1, 'V20' AS VALUE2 FROM DUALthe data is changed to
select 'P2' AS ID, TO_DATE('11/01/2011','MM/DD/YYYY') AS EFF_DATE, 'V10' AS VALUE1, 'V20' AS VALUE2 FROM DUALWould you still want the same results? In this example, the values from November 2011 serve as the values for January and Febrruay 2012. It doesn't matter that Noverber 2011 is outside of the target range.
It works fine... its faster now.
however, i would like to know the difference in my query vs your query in terms of performance..
the subquery runs faster when compared to analytic function...
select * from part p,
source_table st
where p.id = st.id
and st.eff_date = (select max(eff_date) from source_table st1
where st1.eff_date < '01-mar-2012');
If st1.eff_date is a DATE, then don't try to compare it to a VARCHAR2, such as '01-mar-2012'. Use TO_DATE:
where st1.eff_date < TO_DATE ( '01-mar-2012'
, 'DD-mon-YYYY'
)or a DATE literal:
where st1.eff_date < DATE '2012-03-01'instead.
vs
select * from (
select p.id,
st.eff_date,
row_number() over (partition by st.id,st.eff_date order by st.id,st.eff_date desc) as consider_order from part p,
source_table st
where p.id = st.id) where consider_order = 1;
The first approach is doing much less work. It just has to remember what the latest eff_date is. Say it has already found a row with March 1, 2012, and it comes across a row with an earlier date, such as January 1, 2012. As soon as it sees that January 1, 2012 is not the new record holder, it can move on to the next row. (Using the LAST function, as I suggested, would cause it to do even less work.)
The second approach is doing much more work. It has to remember all the dates, in order. Say it has already found a row with March 1, 2012, and it comes across a row with an earlier date, such as January 1, 2012. After it sees that January 1, 2012 is not the new record holder, it still has to determine if January 1 comes 2nd, or 3rd on the list.
Similar Messages
-
Help - Date Range from a column
I have a column in one of my tables that contains the birthdate of a person and it's format is like this:
YYYYMMDD
sample ( 19740226 )
I need to find all the people who are between 35-45 years old from this date: 20080529
What would be the best way to do this, sorry new to date manipulation, thanks a lot of your help ahead of time.Hi,
MONTHS_BETWEEN and TO_DATE are built-in functions. Like all built-in functions, you can learn about them by reading the SQL Language manual:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/index.htm
MONTHS_BETWEEN returns an "age" in months. In this case, it's more convenient to think in terms of years, so I divided the number of months by 12 to get the number of years.
I assumed table_name.column_name was a string in YYYYMMDD format, such as '19701231'. If any row has a value (NULLs are okay) that is not in this format, you will get a run-time error. For example, if a short string, like '197012', is encountered, you'll get the ORA_01840 error.
Apparently, that column is not in that format, at least not always. How you can get the information you need depends on exactly what is in that column. Find out what datatype it is (DATE, NUMBER, VARCHAR2), and, if it is not a DATE, post some samples of actual values. -
Neen help with date range searches for Table Sources
Hi all,
I need help, please. I am trying to satisfy a Level 1 client requirement for the ability to search for records in crawled table sources by a date and/or date range. I have performed the following steps, and did not get accurate results from Advanced searching for date. Please help me understand what I am doing wrong, and/or if there is a way to define a date search attribute without creating a LOV for a date column. (My tables have 500,00 rows.)
I am using SES 10.1.8.3 on Windows 32.
My Oracle 10g Spatial Table is called REPORTS and this table has the following columns:
TRACKNUM Varchar2
TITLE Varchar2
SUMMARY CLOB
SYMBOLCODE Varchar2
Timestamp Date
OBSDATE Date
GEOM SDO_GEOMETRY
I set up the REPORTS table source in SES, using TRACKNUM as the Primary Key (unique and not null), and SUMMARY as the CONTENT Column. In the Table Column Mappings I defined TITLE as String and TITLE.
Under Global Settings > Search Attributes I defined a new Search Attribute (type Date) called DATE OCCURRED (DD-MON-YY).
Went back to REPORTS source previously defined and added a new Table Column Mapping - mapping OBSDATE to the newly defined DATE OCCURRED (DD-MON-YY) search attribute.
I then modified the Schedule for the REPORTS source Crawler Policy to “Process All Documents”.
Schedule crawls and indexes entire REPORTS table.
In SES Advanced Search page, I enter my search keyword, select Specific Source Group as REPORTS, select All Match, and used the pick list to select the DATE OCCURRED (DD-MON-YY) Attribute Name, operator of Greater than equal, and entered the Value 01-JAN-07. Then the second attribute name of DATE_OCCURRED (DD-MON-YY), less than equals, 10-JAN-07.
Search results gave me 38,000 documents, and the first 25 I looked at had dates NOT within the 01-JAN-07 / 10-JAN-07 range. (e.g. OBSDATE= 24-MAR-07, 22-SEP-), 02-FEB-08, etc.)
And, none of the results I opened had ANY dates within the SUMMARY CLOB…in case that’s what was being found in the search.
Can someone help me figure out how to allow my client to search for specific dated records in a db table using a single column for the date? This is a major requirement and they are anxiously awaiting my solution.
Thanks, in advance….raford,
Thanks very much for your reply. However, from what I've read in the SES Admin Document is that (I think) the date format DD/MM/YYYY pertains only to searches on "file system" sources (e.g. Word, Excel, Powerpoint, PDF, etc.). We have 3 file system sources among our 25 total sources. The remaining 22 sources are all TABLE or DATABASE sources. The DBA here has done a great job getting the data standardized using the typical/default Oracle DATE type format in our TABLE sources (DD-MON-YY). Our tables have anywhere from 1500 rows to 2 million rows.
I tested your theory that the dates we are entering are being changed to Strings behind the scenes and on the Advanced Page, searched for results using OBSDATE equals 01/02/2007 in an attempt to find data that I know for certain to be in the mapped OBSDATE table column as 01-FEB-07. My result set contained data that had an OBSDATE of 03-MAR-07 and none containing 01-FEB-07.
Here is the big issue...in order for my client to fulfill his primary mission, one of the top 5 requirements is that he/she be able to find specific table rows that are contain a specific date or range of dates.
thanks very much! -
Need help with date range searches for Table Sources in SES
Hi all,
I need help, please. I am trying to satisfy a Level 1 client requirement for the ability to search for records in crawled table sources by a date and/or date range. I have performed the following steps, and did not get accurate results from Advanced searching for date. Please help me understand what I am doing wrong, and/or if there is a way to define a date search attribute without creating a LOV for a date column. (My tables have 500,00 rows.)
I am using SES 10.1.8.3 on Windows 32.
My Oracle 10g Spatial Table is called REPORTS and this table has the following columns:
TRACKNUM Varchar2
TITLE Varchar2
SUMMARY CLOB
SYMBOLCODE Varchar2
Timestamp Date
OBSDATE Date
GEOM SDO_GEOMETRY
I set up the REPORTS table source in SES, using TRACKNUM as the Primary Key (unique and not null), and SUMMARY as the CONTENT Column. In the Table Column Mappings I defined TITLE as String and TITLE.
Under Global Settings > Search Attributes I defined a new Search Attribute (type Date) called DATE OCCURRED (DD-MON-YY).
Went back to REPORTS source previously defined and added a new Table Column Mapping - mapping OBSDATE to the newly defined DATE OCCURRED (DD-MON-YY) search attribute.
I then modified the Schedule for the REPORTS source Crawler Policy to “Process All Documents”.
Schedule crawls and indexes entire REPORTS table.
In SES Advanced Search page, I enter my search keyword, select Specific Source Group as REPORTS, select All Match, and used the pick list to select the DATE OCCURRED (DD-MON-YY) Attribute Name, operator of Greater than equal, and entered the Value 01-JAN-07. Then the second attribute name of DATE_OCCURRED (DD-MON-YY), less than equals, 10-JAN-07.
Search results gave me 38,000 documents, and the first 25 I looked at had dates NOT within the 01-JAN-07 / 10-JAN-07 range. (e.g. OBSDATE= 10-MAR-07, 22-SEP-07, 02-FEB-08, etc.)
And, none of the results I opened had ANY dates within the SUMMARY CLOB…in case that’s what was being found in the search.
Can someone help me figure out how to allow my client to search for specific dated records in a db table using a single column for the date? This is a major requirement and they are anxiously awaiting my solution.
Thanks very much, in advance….raford,
Thanks very much for your reply. However, from what I've read in the SES Admin Document is that (I think) the date format DD/MM/YYYY pertains only to searches on "file system" sources (e.g. Word, Excel, Powerpoint, PDF, etc.). We have 3 file system sources among our 25 total sources. The remaining 22 sources are all TABLE or DATABASE sources. The DBA here has done a great job getting the data standardized using the typical/default Oracle DATE type format in our TABLE sources (DD-MON-YY). Our tables have anywhere from 1500 rows to 2 million rows.
I tested your theory that the dates we are entering are being changed to Strings behind the scenes and on the Advanced Page, searched for results using OBSDATE equals 01/02/2007 in an attempt to find data that I know for certain to be in the mapped OBSDATE table column as 01-FEB-07. My result set contained data that had an OBSDATE of 03-MAR-07 and none containing 01-FEB-07.
Here is the big issue...in order for my client to fulfill his primary mission, one of the top 5 requirements is that he/she be able to find specific table rows that are contain a specific date or range of dates.
thanks very much! -
Help with PowerShell to delete a date range of Calendar meetings
I'm trying to delete all Calendar items within a date range, from a mailbox. But first I'd like to just make sure my date filter is actually working.
Here is what i HAVE working:
Search-Mailbox ME -SearchQuery "Received:01/01/2010..03/18/2010" -EstimateResultOnly
This works, it gives me a count of all things in my mailbox
Search-Mailbox ME -SearchQuery kind:meetings -EstimateResultOnly
This works, it gives me a count of all Meetings in my Calendar.
I reallly need now to get the date range to work in conjunction with the kind:meetings.
How can I do that?Hi,
The results include the deleted meetings. I test it in my lab.
So the command to delete Calendar meetings with a date range is this:
Search-Mailbox "username" -SearchQuery "Received:01/01/2010..3/18/2015 kind:meetings" –EstimateResultOnly -DeleteContent
Best Regards.
Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact [email protected]
Lynn-Li
TechNet Community Support -
Hi,
I have an Oracle form which allows users to enter :start_date_active(mandatory) and :end_date_active (can be null).
I need to check in form using SQL if there already exists a record for this date range or if there is any overlapping date ranges for the value entered and disallow user from entering that.
I have my query as follows:
SELECT (1)
FROM <table> xsv
WHERE 1=1
AND ( (:START_DATE_ACTIVE >= xsv.start_date_active) AND
(:START_DATE_ACTIVE <= nvl(xsv.end_date_active,'31-DEC-4712'))
OR
(:END_DATE_ACTIVE >= xsv.start_date_active) AND
(:END_DATE_ACTIVE <= nvl(xsv.end_date_active,'31-DEC-4712'))
But, this incorrectly allows me to enter over lapping date ranges when the :end_date_active is null.
It should work as follows :
eg.
start_date_active end_date_active
01-Apr-2009 allowed
01-Mar-2009 10-Mar-2009 allowed
01-feb-2009 Not allowed, as it overlaps with 1st record
10-feb-2009 05-Mar-2009 Not allowed, as it overlaps with 2nd record
05-Mar-2009 20-mar-2009 Not allowed, as it overlaps with 2nd record
and so on.
How do I modify my query to deal with null end dates ?
Many Thanks
ShankarHi, Shankar,
Whenever you have a question, it helps to post:
(1) The version of Oracle (and any other relevant software) you're using
(2) A little sample data (just enough to show what the problem is) from all the relevant tables
(3) The results you want from that data (You posted this. It would be better if it were formatted.)
(4) Your best attempt so far (formatted) (You posted this, but since it's unformated, it's very hard to read.)
(5) The full error message (if any), including line number
Executable SQL statements (like "CREATE TABLE AS ..." or "INSERT ..." statements) are best for (2).
Formatted tabular output is okay for (3). Type these 6 characters
{code}
(small letters only, inside curly brackets) before and after formatted text, to preserve spacing.
Use different names for the parameters and the columns. For example, if the column is called start_date_active, call the corresponding parameter :p_start_date_active. It will help to keep them straight.
In this statement, if the column end_date_active IS NULL, you're treating it as an impossibly late date:
(:END_DATE_ACTIVE <= nvl(xsv.end_date_active,'31-DEC-4712'))That's good. (You should really use TO_DATE ('31-DEC-4712', 'DD-MON-YYYY'), though.)
If it's possible for the parameter :end_date_active to be NULL, you should use NVL in the same way, to equate it with some appropriate date.
The correct way to see if the range a to b (a <= b) overlaps with x to y (x <= y) is:
WHERE b >= x
AND a <= yIf you want an expression that's TRUE when they do not overlap, then say
WHERE NOT ( b >= x
AND a <= y
)or, equivalently,
WHERE b < x
OR a > y -
Hi, I have a Web Report where the user inputs a Date Range Variable say 04/2009 - 03/2010. Once the report appears I would like this range to appear at the top of the report and allow them to change it without having to go back to the variable selection screen.
What do I need to do to get a field show the variable date range and allow them to change the date range as well?
Thanks!Hi Kenneth,
Are you in version 3.x or 7.x?
This is easily achived in 7.x using the Command APIs. The idea is to offer a data selection element to the user. Once the user has changed the date element, then you can use the Command APIs to to change the variable/filter value. Take a look at this:
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/71/8a784226d1d242e10000000a1550b0/frameset.htm
Note that you can use the wizard to create the needed code or you can manually create the code yourself.
Hope this helps. -
Finding duplicates within a date range. SQL help please!!
I have a table of records and I am trying to query the duplicate emails that appear within a given date range but cant figure it out.
There records that it returns are not all duplicates withing the given date range. HELP!!
Here is my query.
Thanks in advance.
SELECT cybTrans.email, cybTrans.trans_id, cybTrans.product_number, cybTrans.*
FROM cybTrans
WHERE (((cybTrans.email) In (SELECT [email] FROM [cybTrans] As Tmp GROUP BY [email] HAVING Count(*)>1 ))
AND ((cybTrans.product_number)='27')
AND ((cybTrans.appsystemtime)>'03-01-2010')
AND ((cybTrans.appsystemtime)<'03-05-2010')
ORDER BY cybTrans.email;Yet another method...
<cfset start_date = DateFormat('01/01/2007',
'mm/dd/yyyy')>
<cfset end_date = DateFormat('09/30/2009',
'mm/dd/yyyy')>
<cfset start_year = DatePart('yyyy', start_date)>
<cfset end_year = DatePart('yyyy', end_date)>
<cfset schoolyear_start = '09/01/'>
<cfset schoolyear_end = '06/30/'>
<cfset count = 0>
<cfloop index="rec" from="#start_year#"
to="#end_year#">
<cfset tmp_start = DateFormat('#schoolyear_start##rec#',
'mm/dd/yyyy')>
<cfset tmp_end = DateFormat('#schoolyear_end##rec + 1#',
'mm/dd/yyyy')>
<cfif DateCompare(tmp_start,start_date) gt -1 and
DateCompare(tmp_end, end_date) eq -1>
<cfset count = count + 1>
</cfif>
</cfloop>
<cfoutput>
<br>There are #count# school year periods between
#start_date# and #end_date#
</cfoutput> -
I just did the update for the software on the 8530. This is a new problem since the update. I cannot lose my old entries, so I am unable to sync at all now until Blackberry addresses this bug.
I have read through all of the "fixes" but none of them work.
My Keep Appointments setting has always (and I verified is still) set to "forever"
I went into the advance settings on the MAC desktop software from Blackberry and tried changing the date range to the suggested 14 days past and 365 days future. I even tried changing the past days parameter to "1" in hopes it would simply ignore old entries... It still wants to delete 435 past entries.
I have to keep these.
Help, Blackberry! Your "update" to the software is overriding my settings and has made the sync function unusable.Christina,
Thanks for the reply. I unchecked all calendars in iCal and synced and it still gave me the same notice. So then I went into the iTunes window and checked the sync only certain calendars box (instead of the all calendars box) and left all the calendars unchecked and clicked apply but when I click on sync it automatically reverts to all calendars.
When you say you unchecked all calendars did you mean in iCal? And what did you have your iCal settings at in your iTunes sync window?
I appreciate your help,
Andrea -
I am trying to develop a query in MS Access 2010 to join two tables using three joins, one of which is a (between) date range. The tables are contained in Access. The reason
the tables are contained in access because they are imported from different ODBC warehouses and the data is formatted for uniformity. I believe this cannot be developed using MS Visual Query Designer. I think writing a query in SQL would be suiting this project.
ABCPART links to XYZPART. ABCSERIAL links to XYZSERIAL. ABCDATE links to (between) XYZDATE1 and ZYZDATE2.
[ABCTABLE]
ABCORDER
ABCPART
ABCSERIAL
ABCDATE
[ZYXTABLE]
XYZORDER
XYZPART
XYZSERIAL
XYZDATE1
XYZDATE2Thank you for the looking at the post. The actual table names are rather ambiguous. I renamed them so it would make more sense. I will explain more and give the actual names. What I do not have is the actual data in the table. That is something I don't have
on this computer. There are no "Null" fields in either of the tables.
This table has many orders (MSORDER) that need to match one order (GLORDER) in GLORDR. This is based on MSPART joined to GLPART, MSSERIAL joined to GLSERIAL, and MSOPNDATE joined if it falls between GLSTARTDATE and GLENDDATE.
[MSORDR]
MSORDER
MSPART
MSSERIAL
MSOPNDATE
11111111
4444444
55555
2/4/2015
22222222
6666666
11111
1/6/2015
33333333
6666666
11111
3/5/2015
This table has one order for every part number and every serial number.
[GLORDR]
GLORDER
GLPART
GLSERIAL
GLSTARTDATE
GLENDDATE
ABC11111
444444
55555
1/2/2015
4/4/2015
ABC22222
666666
11111
1/5/2015
4/10/2015
AAA11111
555555
22222
3/2/2015
4/10/2015
Post Query table
GLORDER
MSORDER
GLSTARTDATE
GLENDDATE
MSOPNDATE
ABC11111
11111111
1/2/2015
4/4/2015
2/4/2015
ABC22222
22222222
1/5/2015
4/10/2015
1/6/2015
ABC22222
33333333
1/5/2015
4/10/2015
3/5/2015
This is the SQL minus the between date join.
SELECT GLORDR.GLORDER, MSORDR.MSORDER, GLORDR.GLSTARTDATE, GLORDR.GLENDDATE, MSORDR.MSOPNDATE
FROM GLORDR INNER JOIN MSORDR ON (GLORDR.GLSERIAL = MSORDR.MSSERIAL) AND (GLORDR.GLPART = MSORDR.MSPART); -
Formula help - Group totals for more than one date range
Post Author: melcaylor
CA Forum: Formula
I need to show in 3 columns
inside of a grouping that totals an amount field based on a date
range that amount was posted. So for example:
Billy Bob in the state of MA made $5.5m total, $800k in the last 21 days, $400k in the last 14 days and $150k in
the last 7 days.
I assume this is possible but I
just donu2019t know what type of formula to write to make it work. For this
example, there are 2 tables u2013 user table and $$ table. The User table has
the user name, the $$ table has the pay date and the amount.Post Author: SKodidine
CA Forum: Formula
You only need simple formulae in Running Totals to accomplish this.
1. Group by Name
2. Create the following Running Totals:
2.1 A running total to sum the pay amount for all records, and resets on 'Change of Group' of Name.
2.2 A running total to sum the pay amount and for 'Evaluate' click on the radio button next to 'Use a formula' and then click on X-2 button next to it.
In the formula workshop window type a formula such as: {table.payment_date} in (currentdate - 21) to currentdate;
For 'Reset' click on the radio button next to 'On change of group' and pick the group name.
2.3 Create another running total just as in step 2.2 above but change the formula to: {table.payment_date} in (currentdate - 14) to currentdate;
2.4 Create the last running total just as in step 2.2 above but change the formula to: {table.payment_date} in (currentdate - 7) to currentdate;
Hide the details section and in the group footer place text boxes with appropriate text and insert these running totals to give you the numbers you want.
The only issue I see with this is if a person was paid yesterday a sum of $25, then it will show $25 for total, last 7days, last 14days and also for last 21days. At first look it might be mistaken for $75. -
**PLEASE HELP**Need Help adding date ranges to form
I have designed a form with approximately 28 user defined date fields. I want the user to be able put in the first date range and then seautomaticaly fill in the other dates sequencially.
ie,.... the user puts in 08/01/2007 then the following date field populates with 08/02/2007, then 08/03/2007 and so on....The following script can be used for the "exit" action so the basic action to get the start date's number and then it can be used to compute the next days field values by adding the appropriate number of days. A more experienced user could use a control loop t0 modify the field names and number of days to add to the start date's day number for the additional date fields.
// Script for exit from date select field
// perform calculation only if an input date has been selected
if (HasValue(cInputDate)) then
// format string for the date fields
var cDateFormat = "MMM D, YYYY"
// intermediate information start - optional
xfa.host.messageBox(Concat("The input date formatted value is: ", cInputDate.formattedValue, "
The input date's numeric value: ", Date2Num($.formattedValue, cDateFormat), "
The adjusted date number is: ", (Date2Num($.formattedValue, cDateFormat) + 1), "
The adjusted date is: ", Num2Date(Date2Num($.formattedValue, cDateFormat) + 1) ),
"Intermediate Detail", 3, 0)
// intermediate information end - optional
var StartDateNumber = Date2Num($.formattedValue, cDateFormat)
// add 1 day to StartDateNumber
cAdjustDate = Num2Date(StartDateNumber + 1, cDateFormat)
// add code for additional date fields here adding appropriate number of days for date
else
cAdjustDate = "" // no input keep field blank
// add code for additional date fields here
endif -
How to get top 11 values per date range
I want to get the top 11 values by date range.
Sample Data
CREATE TABLE SAMPLE_DATA
DOMAIN_NAME VARCHAR2(100),
QTD NUMBER,
LOAD_DATE DATE
-- Insert
BEGIN
FOR lc IN 1..20
LOOP
FOR ld IN 1..30
LOOP
INSERT
INTO SAMPLE_DATA VALUES
'DM_'
||lc,
round(dbms_random.value(0,1000)),
SYSDATE-ld
END LOOP;
END LOOP;
COMMIT;
END;
SELECT *
FROM
(SELECT DOMAIN_NAME,
QTD,
LOAD_DATE
FROM
(SELECT DOMAIN_NAME,
QTD,
LOAD_DATE
FROM SAMPLE_DATA
WHERE LOAD_DATE = TRUNC(SYSDATE-3)
ORDER BY QTD DESC
WHERE ROWNUM <=10
UNION ALL
SELECT 'Others' DOMAIN_NAME,
SUM(QTD) QTD,
LOAD_DATE
FROM
(SELECT DOMAIN_NAME,
QTD,
LOAD_DATE
FROM
(SELECT rownum rn,
DOMAIN_NAME,
QTD,
LOAD_DATE
FROM
(SELECT DOMAIN_NAME,
QTD,
LOAD_DATE
FROM SAMPLE_DATA
WHERE LOAD_DATE = TRUNC(SYSDATE-3)
ORDER BY QTD DESC
WHERE rn > 10
GROUP BY LOAD_DATE
ORDER BY QTD DESC
-- Result
DOMAIN_NAME QTD LOAD_DATE
Others 2888 24/03/13
DM_1 1000 24/03/13
DM_20 933 24/03/13
DM_11 913 24/03/13
DM_3 743 24/03/13
DM_13 572 24/03/13
DM_12 568 24/03/13
DM_9 564 24/03/13
DM_6 505 24/03/13
DM_5 504 24/03/13
DM_2 480 24/03/13
Please, Help me get in one query this result using a range of date.
e.g
using LOAD_DATE BETWEEN '24/03/13' AND '25/03/13'
DOMAIN_NAME QTD LOAD_DATE
Others 2888 24/03/13
DM_1 1000 24/03/13
DM_20 933 24/03/13
DM_11 913 24/03/13
DM_3 743 24/03/13
DM_13 572 24/03/13
DM_12 568 24/03/13
DM_9 564 24/03/13
DM_6 505 24/03/13
DM_5 504 24/03/13
DM_2 480 24/03/13
Others 1948 25/03/13
DM_1 807 25/03/13
DM_8 764 25/03/13
DM_7 761 25/03/13
DM_11 656 25/03/13
DM_18 611 25/03/13
DM_17 523 25/03/13
DM_14 467 25/03/13
DM_19 447 25/03/13
DM_15 437 25/03/13
DM_6 380 25/03/13 Thank you in advance.I got the solution. Just sharing.
I used analytic functions that make my job easy.
Sample Data
DOMAIN_NAME QTD LOAD_DATE
DM_1 807 25/03/2013
DM_1 1000 24/03/2013
DM_2 226 25/03/2013
DM_2 480 24/03/2013
DM_3 244 25/03/2013
DM_3 743 24/03/2013
DM_4 48 25/03/2013
DM_4 413 24/03/2013
DM_5 164 25/03/2013
DM_5 504 24/03/2013
DM_6 380 25/03/2013
DM_6 505 24/03/2013
DM_7 761 25/03/2013
DM_7 212 24/03/2013
DM_8 764 25/03/2013
DM_8 308 24/03/2013
DM_9 354 25/03/2013
DM_9 564 24/03/2013
DM_10 214 25/03/2013
DM_10 367 24/03/2013
DM_11 656 25/03/2013
DM_11 913 24/03/2013
DM_12 37 25/03/2013
DM_12 568 24/03/2013
DM_13 332 25/03/2013
DM_13 572 24/03/2013
DM_14 467 25/03/2013
DM_14 87 24/03/2013
DM_15 437 25/03/2013
DM_15 450 24/03/2013
DM_16 238 25/03/2013
DM_16 299 24/03/2013
DM_17 523 25/03/2013
DM_17 143 24/03/2013
DM_18 611 25/03/2013
DM_18 145 24/03/2013
DM_19 447 25/03/2013
DM_19 464 24/03/2013
DM_20 91 25/03/2013
DM_20 933 24/03/2013 Top 11 QTD of DOMAIN_NAME per Data Range.
SELECT *
FROM
(SELECT DOMAIN_NAME,
QTD,
LOAD_DATE
FROM
(SELECT LOAD_DATE,
DOMAIN_NAME ,
QTD,
(DENSE_RANK() OVER (PARTITION BY LOAD_DATE ORDER BY QTD DESC )) AS RANK_QTD
FROM SAMPLE_DATA
WHERE trunc(load_date) BETWEEN '24/03/2013' AND '25/03/2013'
WHERE RANK_QTD <= 10
UNION ALL
SELECT 'Others',
SUM(QTD) AS QTD,
LOAD_DATE
FROM
(SELECT LOAD_DATE,
DOMAIN_NAME ,
QTD,
(DENSE_RANK() OVER (PARTITION BY LOAD_DATE ORDER BY QTD DESC )) AS RANK_QTD
FROM SAMPLE_DATA
WHERE trunc(load_date) BETWEEN '24/03/2013' AND '25/03/2013'
WHERE RANK_QTD > 10
GROUP BY LOAD_DATE
ORDER BY LOAD_DATE ASC,
QTD DESC
DOMAIN_NAME QTD LOAD_DATE
Others 2888 24/03/2013
DM_1 1000 24/03/2013
DM_20 933 24/03/2013
DM_11 913 24/03/2013
DM_3 743 24/03/2013
DM_13 572 24/03/2013
DM_12 568 24/03/2013
DM_9 564 24/03/2013
DM_6 505 24/03/2013
DM_5 504 24/03/2013
DM_2 480 24/03/2013
Others 1948 25/03/2013
DM_1 807 25/03/2013
DM_8 764 25/03/2013
DM_7 761 25/03/2013
DM_11 656 25/03/2013
DM_18 611 25/03/2013
DM_17 523 25/03/2013
DM_14 467 25/03/2013
DM_19 447 25/03/2013
DM_15 437 25/03/2013
DM_6 380 25/03/2013 -
Date range query problem in report
Hi all,
I have created a report based on query and i want to put date range selection but query giving problem.
If i am creating select list selection then it is working fine means it will display all records on the particular date.
But what i need is that user will enter date range as creation_date1,creation_date2 and query should return all the records between these date range. i want to pass it by creating items, i created two items and passing creation_date range to display all records but not displaying and if not passing date then should take null as default and display all records
Here is the query:
/* Formatted on 2006/12/10 20:01 (Formatter Plus v4.8.0) */
SELECT tsh."SR_HEADER_ID", tsh."SALES_DEPT_NUMBER", tsh."COUNTRY",
tsh."LOCAL_REPORT_NUMBER", tsh."ISSUE_DATE", tsh."SUBJECT",
tsh."MACHINE_SERIAL_NUMBER", tsh."MACHINE_TYPE", tsh."MACHINE_HOURS",
tsh."STATUS"
FROM "TRX_SR_HEADERS" tsh, "TRX_SR_PARTS" tsp
WHERE (tsh.status LIKE :p23_status_sp OR tsh.status IS NULL)
AND (tsh.machine_type LIKE :p23_machine_type_sp)
AND ( tsh.machine_serial_number LIKE
TO_CHAR (:p23_machine_serial_number_sp)
OR tsh.machine_serial_number IS NULL
AND ( TO_CHAR (tsh.failure_date, 'DD-MON-YY') LIKE
TO_CHAR (:p23_failure_date_sp)
OR TO_CHAR (tsh.failure_date, 'DD-MON-YY') IS NULL
AND ( TO_CHAR (tsh.creation_date, 'DD-MON-YY')
BETWEEN TO_CHAR (:p23_creation_date_sp)
AND TO_CHAR (:p23_creation_date_sp1)
OR TO_CHAR (tsh.creation_date, 'DD-MON-YY') IS NULL
AND (tsh.issue_date LIKE :p23_date_of_issue_sp OR tsh.issue_date IS NULL)
AND (tsh.country LIKE :p23_country_sp OR tsh.country IS NULL)
AND ( tsh.local_report_number LIKE TO_CHAR (:p23_local_rep_num_sp)
OR tsh.local_report_number IS NULL
AND ( tsp.part_number LIKE TO_CHAR (:p23_part_number_sp)
OR tsp.part_number IS NULL
AND tsh.machine_type IN (
SELECT DISTINCT machine_type
FROM trx_sales_dept_machine_list
WHERE sales_department_id IN (
SELECT DISTINCT sales_department_id
FROM trx_user_sales_department
WHERE UPPER (user_name) =
UPPER ('&APP_USER.'))
AND SYSDATE >= valid_from)
AND tsh.sr_header_id = tsp.sr_header_id
can any one tell me wat is wroung in this query.
Any other way to write this?
Thank You,
AmitHi User....
Here is some date range SQL that my teams uses with some success:
For date columns that do not contain NULL values, try this (note the TRUNC, it might help with your "today" problem).
The hard coded dates allow users to leave the FROM and TO dates blank and still get sensible results (ie a blank TO date field asks for all dates in the future.
AND TRUNC(DATE_IN_DATABASE)
BETWEEN
decode( :P1_DATE_FROM,
TO_DATE('01-JAN-1900'),
:P1_DATE_FROM)
AND
decode( :P1_DATE_TO,
TO_DATE('31-DEC-3000'),:
:P1_DATE_TO)
For date columns that contain NULL values, try this (a little bit trickier):
AND nvl(TRUNC(DATE_IN_DATABASE),
decode( :P1_DATE_FROM,
decode( :P1_DATE_TO,
TO_DATE('30-DEC-3000'),
NULL),
NULL)
BETWEEN
decode( :P1_DATE_FROM,
TO_DATE('01-JAN-1900'),
:P1_DATE_FROM)
AND
decode( :P1_DATE_TO,
TO_DATE('31-DEC-3000'),
:P1_DATE_TO)
Note the 30-DEC-3000 versus 31-DEC-3000. This trick returns the NULL dates when the FROM and TO date range items are both blank.
I hope this helps.
By the way, does anyone have a better way of doing this? The requirement is given a date column in a database and a FROM and a TO date item on a page,
find all of the dates in the database between the FROM and TO dates. If the FROM date is blank, assume the user want all dates in the past (excluding NULL dates). If the TO date is blank, assume that the user wants all of the dates in the future (excluding NULL dates). If both FROM and TO dates are blank, return all of the dates in the databse (including NULL dates).
Cheers,
Patrick -
Devloped an ALV report for daily cash receipts for selected date range
hi,
how to devlop an ALV report for daily cash receipts for selected date range.for this report what are the tables and fields we have to use.what is the selectionscreen&what is logic.give me sample report.Hi,
You can develop simple reports using Report Painter.
You may be also interested in:
Check report SAPMF05A for credit memo
See the following Std reports on Payment Advices execute the Tcodes:
S_ALR_87009888
S_ALR_87009889
S_ALR_87009890
S_ALR_87009891
S_ALR_87009892
S_ALR_87009893
S_ALR_87009978
S_ALR_87009979
S_ALR_87009980
S_ALR_87009981
S_ALR_87009982
S_ALR_87009983
S_ALR_87010056
S_ALR_87010057
S_ALR_87010058
S_ALR_87010059
S_ALR_87010060
S_ALR_87010061
S_ALR_87010066
S_ALR_87010067
S_ALR_87012106
S_ALR_87012107
S_ALR_87012108
S_ALR_87012109
S_ALR_87012110
S_ALR_87012111
S_ALR_87012116
S_ALR_87012117
S_ALR_87012200
S_ALR_87012201
S_ALR_87012202
S_ALR_870122
S_ALR_87012204
S_ALR_87012205
S_ALR_87012350
S_ALR_87012351
S_ALR_87012352
S_ALR_87012353
S_ALR_87012354
S_ALR_87012355
sample ALV report:
tables:
marav. "Table MARA and table MAKT
Data to be displayed in ALV
Using the following syntax, REUSE_ALV_FIELDCATALOG_MERGE can auto-
matically determine the fieldstructure from this source program
Data:
begin of imat occurs 100,
matnr like marav-matnr, "Material number
maktx like marav-maktx, "Material short text
matkl like marav-matkl, "Material group (so you can test to make
" intermediate sums)
ntgew like marav-ntgew, "Net weight, numeric field (so you can test to
"make sums)
gewei like marav-gewei, "weight unit (just to be complete)
end of imat.
Other data needed
field to store report name
data i_repid like sy-repid.
field to check table length
data i_lines like sy-tabix.
Data for ALV display
TYPE-POOLS: SLIS.
data int_fcat type SLIS_T_FIELDCAT_ALV.
select-options:
s_matnr for marav-matnr matchcode object MAT1.
start-of-selection.
read data into table imat
select * from marav
into corresponding fields of table imat
where
matnr in s_matnr.
end-of-selection.
Now, we start with ALV
To use ALV, we need a DDIC-structure or a thing called Fieldcatalogue.
The fieldcatalouge can be generated by FUNCTION
'REUSE_ALV_FIELDCATALOG_MERGE' from an internal table from any
report source, including this report.
The only problem one might have is that the report and table names
need to be in capital letters. (I had it )
Store report name
i_repid = sy-repid.
Create Fieldcatalogue from internal table
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
I_INTERNAL_TABNAME = 'IMAT' "capital letters!
I_INCLNAME = sy-repid
CHANGING
CT_FIELDCAT = int_fcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = i_repid
I_STRUCTURE_NAME = 'marav'
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = imat.
IF SY-SUBRC <> 0.
WRITE: 'SY-SUBRC: ', SY-SUBRC .
ENDIF.
Hope this will help.
Regards,
Naveen.
Maybe you are looking for
-
SSRS CatalogItem method not working for deploying a shared data source
I have been working with the SSRS CreateCatalogItem method to deploy reports to a SSRS 2012 in SharePoint integrated mode with SharePoint Server Enterprise 2013. I am using Powershell. The CreateCatalogItem method works fine when I deploy RDL files,
-
SQL to check number of extents avail for a segment in a tbs
Does anyone have SQL to compare a segment's next_extent to the size and number of free chunks in dba_free_space? Currently I am taking the next_extent * some factor (e.g. 4) and comparing it the SUM of space in dba_free_space. However, the problem wi
-
How do I remove a page from a pdf document?
I am trying to rplace corrected pages of a pdf doc. I need modifications. I have combined the files and need to remove and rearrange.
-
Namespace and extention/inhertance
I wonder if anybody have observed similar behaviour. Our process: 1. write SLSB with request/response 2. let the servicegen generate the web-service.xml We use inheritance (which translates to extention in wsdl) to provide some common elements for re
-
I need to open a custom report instead of using the "Analyze..." link of the report I put in my portal page. I create a hidden link like this: http://<server>:7780/discoverer/viewer?userName=<name>&password=<pwd>&databaseIdentifier=<connStr>&connecti