PL/SQL function for the addition of "days."
I created a function that, at a date and a number, adds many days to the date. The problem is that there are parameters to include Saturday, Sunday or Monday as these days. Here is an example of the callDAYSBETWEEN('01-Aug-11',5,0,0,0) will give 5 calendar days since August 1, 2011 (that you would not exclude Saturday, Sunday or Monday)
DAYSBETWEEN (August 1, 11 ', 5, 1,1,0) would give you 5 working days since August 1, 2011
DAYSBETWEEN('01-Aug-11',5,0,1,1) would give you 5 days of August 1, 2011 spring break Sunday and Monday.
My current role is:
create or replace
FUNCTION DAYSBETWEEN(
DAYIN IN DATE ,
ADDNUM IN NUMBER ,
EXSAT IN NUMBER ,
EXSUN IN NUMBER ,
EXMON IN NUMBER )
RETURN DATE
IS
dtestart DATE;
intcount NUMBER;
holidays NUMBER;
BEGIN
dtestart := DAYIN;
intcount :=1;
WHILE intcount <= ADDNUM
LOOP
dtestart := dtestart + 1;
IF NOT((EXSAT = 1 AND TO_CHAR(dtestart, 'd')= 7) OR (EXSUN=1 AND TO_CHAR(dtestart, 'd')= 1) OR (EXMON=1 AND TO_CHAR(dtestart, 'd')= 2)) THEN
intcount := intcount + 1;
END IF;
END LOOP;
RETURN dtestart;
END DAYSBETWEEN;
This works for a small set of values for the date, but when there is a bigger set of dates, it takes hours to complete because of the time loop and multiple or statements.Y at - it another game of logic, I could use to improve this query, using possibly not the while loop / or statements?
Hi again:
This is the query, reformatted in the form of a function, exectuing the same thing I did in the above query:
SQL> CREATE OR REPLACE FUNCTION daysbetween
2 (
3 dayin IN DATE ,
4 addnum IN NUMBER ,
5 exsat IN NUMBER ,
6 exsun IN NUMBER ,
7 exmon IN NUMBER )
8
9 RETURN DATE
10
11 IS
12
13 dtestart DATE;
14 intcount NUMBER;
15 holidays NUMBER;
16
17 BEGIN
18
19 WITH all_dates AS
20 (
21 SELECT LEVEL AS days_to_add
22 , dayin
23 , dayin + LEVEL AS new_dt
24 , addnum
25 , exsat
26 , exsun
27 , exmon
28 FROM dual
29 CONNECT BY LEVEL <= addnum * 2
30 )
31 , exclusions AS
32 (
33 SELECT ROW_NUMBER() OVER ( ORDER BY new_dt) ordering
34 , addnum
35 , new_dt
36 , TO_CHAR ( new_dt, 'DY' )
37 FROM all_dates
38 WHERE 1=1
39 AND TO_CHAR ( new_dt, 'DY' ) != DECODE ( exsat, 1, 'SAT', 'XXX')
40 AND TO_CHAR ( new_dt, 'DY' ) != DECODE ( exsun, 1, 'SUN', 'XXX')
41 AND TO_CHAR ( new_dt, 'DY' ) != DECODE ( exmon, 1, 'MON', 'XXX')
42 )
43 SELECT MAX( new_dt )
44 INTO dtestart
45 FROM exclusions
46 WHERE ordering <= addnum;
47
48 RETURN dtestart;
49
50 END daysbetween;
51 /
Function created.
SQL> SELECT daysbetween ( DATE '2011-08-01', 150, 1, 0, 1) FROM DUAL;
DAYSBETWE
---------
26-FEB-12
1 row selected.
The only variable not factored is holiday, but I saw that you were for them in your LOOP function either.
Due to the nature and variability holiday, it is better to have a table with the listed holidays, and those who could be elminated of charges together in the same 'exculsions' query where I used the TO_CHAR and DECODE to exclude the Fri, sat and Sun.
Tags: Database
Similar Questions
-
How to set the flag for the first 3 days
Hi all
I have a table with a complete list of April and may 2015 date month and his working days (just for example, I have included only in April and may 2015 data but the table has data for 20 years since 2000).
Below is the table create and insert scripts for complete data.
CREATE TABLE dates_dim(day DATE, business_day NUMBER, month NUMBER, day_of_week VARCHAR2 (100)); Insert into DATES_DIM Values (TO_DATE('05/01/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1, '201505', 'FRIDAY'); Insert into DATES_DIM Values (TO_DATE('05/02/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SATURDAY'); Insert into DATES_DIM Values (TO_DATE('05/03/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SUNDAY'); Insert into DATES_DIM Values (TO_DATE('05/04/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 2, '201505', 'MONDAY'); Insert into DATES_DIM Values (TO_DATE('05/05/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 3, '201505', 'TUESDAY'); Insert into DATES_DIM Values (TO_DATE('05/06/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 4, '201505', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('05/07/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 5, '201505', 'THURSDAY'); Insert into DATES_DIM Values (TO_DATE('05/08/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 6, '201505', 'FRIDAY'); Insert into DATES_DIM Values (TO_DATE('05/09/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SATURDAY'); Insert into DATES_DIM Values (TO_DATE('05/10/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SUNDAY'); Insert into DATES_DIM Values (TO_DATE('05/11/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 7, '201505', 'MONDAY'); Insert into DATES_DIM Values (TO_DATE('05/12/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 8, '201505', 'TUESDAY'); Insert into DATES_DIM Values (TO_DATE('05/13/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 9, '201505', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('05/14/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 10, '201505', 'THURSDAY'); Insert into DATES_DIM Values (TO_DATE('05/15/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 11, '201505', 'FRIDAY'); Insert into DATES_DIM Values (TO_DATE('05/16/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SATURDAY'); Insert into DATES_DIM Values (TO_DATE('05/17/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SUNDAY'); Insert into DATES_DIM Values (TO_DATE('05/18/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 12, '201505', 'MONDAY'); Insert into DATES_DIM Values (TO_DATE('05/19/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 13, '201505', 'TUESDAY'); Insert into DATES_DIM Values (TO_DATE('05/20/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 14, '201505', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('05/21/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 15, '201505', 'THURSDAY'); Insert into DATES_DIM Values (TO_DATE('05/22/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 16, '201505', 'FRIDAY'); Insert into DATES_DIM Values (TO_DATE('05/23/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SATURDAY'); Insert into DATES_DIM Values (TO_DATE('05/24/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SUNDAY'); Insert into DATES_DIM Values (TO_DATE('05/25/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'MONDAY'); Insert into DATES_DIM Values (TO_DATE('05/26/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 17, '201505', 'TUESDAY'); Insert into DATES_DIM Values (TO_DATE('05/27/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 18, '201505', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('05/28/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 19, '201505', 'THURSDAY'); Insert into DATES_DIM Values (TO_DATE('05/29/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 20, '201505', 'FRIDAY'); Insert into DATES_DIM Values (TO_DATE('05/30/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SATURDAY'); Insert into DATES_DIM Values (TO_DATE('05/31/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201505', 'SUNDAY'); Insert into DATES_DIM Values (TO_DATE('04/01/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1, '201504', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('04/02/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 2, '201504', 'THURSDAY '); Insert into DATES_DIM Values (TO_DATE('04/03/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 3, '201504', 'FRIDAY '); Insert into DATES_DIM Values (TO_DATE('04/04/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SATURDAY '); Insert into DATES_DIM Values (TO_DATE('04/05/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SUNDAY '); Insert into DATES_DIM Values (TO_DATE('04/06/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 4, '201504', 'MONDAY '); Insert into DATES_DIM Values (TO_DATE('04/07/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 5, '201504', 'TUESDAY '); Insert into DATES_DIM Values (TO_DATE('04/08/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 6, '201504', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('04/09/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 7, '201504', 'THURSDAY '); Insert into DATES_DIM Values (TO_DATE('04/10/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 8, '201504', 'FRIDAY '); Insert into DATES_DIM Values (TO_DATE('04/11/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SATURDAY '); Insert into DATES_DIM Values (TO_DATE('04/12/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SUNDAY '); Insert into DATES_DIM Values (TO_DATE('04/13/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 9, '201504', 'MONDAY '); Insert into DATES_DIM Values (TO_DATE('04/14/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 10, '201504', 'TUESDAY '); Insert into DATES_DIM Values (TO_DATE('04/15/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 11, '201504', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('04/16/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 12, '201504', 'THURSDAY '); Insert into DATES_DIM Values (TO_DATE('04/17/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 13, '201504', 'FRIDAY '); Insert into DATES_DIM Values (TO_DATE('04/18/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SATURDAY '); Insert into DATES_DIM Values (TO_DATE('04/19/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SUNDAY '); Insert into DATES_DIM Values (TO_DATE('04/20/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 14, '201504', 'MONDAY '); Insert into DATES_DIM Values (TO_DATE('04/21/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 15, '201504', 'TUESDAY '); Insert into DATES_DIM Values (TO_DATE('04/22/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 16, '201504', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('04/23/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 17, '201504', 'THURSDAY '); Insert into DATES_DIM Values (TO_DATE('04/24/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 18, '201504', 'FRIDAY '); Insert into DATES_DIM Values (TO_DATE('04/25/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SATURDAY '); Insert into DATES_DIM Values (TO_DATE('04/26/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0, '201504', 'SUNDAY '); Insert into DATES_DIM Values (TO_DATE('04/27/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 19, '201504', 'MONDAY '); Insert into DATES_DIM Values (TO_DATE('04/28/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 20, '201504', 'TUESDAY '); Insert into DATES_DIM Values (TO_DATE('04/29/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 21, '201504', 'WEDNESDAY'); Insert into DATES_DIM Values (TO_DATE('04/30/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 22, '201504', 'THURSDAY '); COMMIT;
I'm looking for a select statement that defines the indicator 'Y' for April records months and "n" for records in may for the first 3 days of the request. Here's the difficult thing, the results should vary depending when they run the select query.
For example:
Scenario-1: If I run the SQL code may 1st, 2nd, 3rd, 4th, or 5th (with in the first 3 days), FLAG must be set on 'Y' for records in April and "n" for records in May.
Scenario 2: If I run anywhere between May6th 31, FLAG must be set to ' do for April month and 'Y' for records in May.
Search results for scenario 1 should look something like this the results of the SQL query below (as I can't keep the complete set of results, I wrote a select query which will give you the expected results if you run the DDL and DML scripts above)
select day,case when day between '01-APR-2015' and '30-APR-2015' then 'Y' else 'N' end flag from dates_dim;
Results for the scenario-2 should look something like this the results of the SQL query below (as I can't keep the complete set of results, I wrote a select query which will give you the expected results if you run the DDL and DML scripts above)
select day,case when day between '01-APR-2015' and '30-APR-2015' then 'N' else 'Y' end flag from dates_dim;
Please let me know if it is confusing. Thank you.
Hello
Thanks for posting the CREATE TABLE and INSERT statements; It's very helpfu.
Month article it should really be a DATE, not a NUMBER. This issue (and many others) would be simpler and more effective it was a DATE, rather than a NUMBER, since it must be compared with the DATEs.
As the month is a NUMBER, do not insert VARCHAR2 values, such as '201505', in it.
Why is-day_of_week 100 characters? The longest name in English ("WEDNESDAY") is 9 characters. Day_name fairer apply in trouble.
Here's a way to do what you asked:
DEFINE SYSDATE = "DATE" "2015-05-05.
DEFINE SYSDATE = "DATE" "2015-05-06.
WITH got_effective_month AS
(
SELECT TO_NUMBER (TO_CHAR (ADD_MONTHS (& SYSDATE
CASE
WHEN COUNT (*)<=>=>
THEN-1
0 OTHERWISE
END
)
, "YYYYMM.
)
) AS effective_month
OF dates_dim
Day WHERE BETWEEN TRUNC (& SYSDATE, 'MONTH')
AND & SYSDATE
AND business_day > 0
)
SELECT d.
CASE
WHEN month = e.effective_month
THEN 'Y '.
ANOTHER "N".
Flag of the END as the
OF dates_dim d
CROSS JOIN e got_effective_month
ORDER BY d.day
;
I used the proxy & SYSDATE to test. In Production, you will use the SYSDATE function instead.
A calendar table, like days_dim, is really a good idea. You may consider adding a column business_day_count cumulative, a NUMBER that increments of 1 every day business. To find out how many days passed since any day x (for example, the 1st of this month), you would only need extract the 2 rows in the table: line x and the line today.
-
calculate data for the last 30 days according to the date of sys
In above given the query, how do I calculate the details of the amount of the last 30 days, APR, MAY, and JUNESELECT DT, ITEMCODE, ITEMNAME, QTY FROM TABLE1
As the month during JULY, August, the amount of detail is required for the last 30 days (from sysdate), MAY, JUNE, July
Please suggest.
Yogesh
Published by: user12957777 on July 28, 2010 03:16Hello
CASE expressions can filter data in specific columns:
SELECT SUM ( CASE WHEN dt >= ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH') , -3 ) AND dt < ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH') , -2 ) THEN qty END ) AS third_month , SUM ( CASE WHEN dt >= ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH') , -2 ) AND dt < ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH') , -1 ) THEN qty END ) AS second_month , SUM ( CASE WHEN dt >= ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH') , -1 ) AND dt < TRUNC (SYSDATE, 'MONTH') THEN qty END ) AS last_month , SUM ( CASE WHEN dt >= TRUNC (SYSDATE) - 30 AND dt < TRUNC (SYSDATE) THEN qty END ) AS last_30_days FROM table1 ;
You can do this with GROUP BY, in addition, if you want to separate for each itemname (for example) lines.
I guess some things, like what do you mean by the last 30 days.
If you wish to post a few 9creation TABLE or INSERT sample data) and the results you want from this data, then I could test this.
-
SQL function for comparing 2 strings
Hi all
Is there a SQL function for comparing 2 strings?There is no function of pre defined in Sql for the string comparison. You can create according to your requirement.
Concerning
-
I broke my screen, and now cannot drag to open it. I have an alarm that don't go. I can let the battery die I know but I really want to be able to access and examine what are the texts I received today. I think that my ICloud is can be disabled. I also want to synchronize my phone before I take it buy a new one. Is it possible to synchronize and watch my calendar for the next few days?
Without entering your access code, it is not possible, unless your time is in iCloud. If this is the case, connect to iCloud.com to check your calendar.
Good luck.
-
How can I do a quick preview (thumbnails?) of all open tabs in a window (Safari has a function for the display of open tabs)?
Maybe look into this extension instead:
- Permanent list all tabs button: https://addons.mozilla.org/firefox/addon/permanent-listalltabs/
-
Vista 64 bit OS
Thanks for the replies, the problem was on the Microsoft site itself and internal glitch for the last 2 days on the garbled causing MY MSN page without graphics and text.
-
I am running Windows 7 and noticed that Windows updates did not work. The parameters are defined for the update every day. When I went to update manually returned an error WindowsUpdate_80070017. MSFT site was no help. Any recommendations?
Since neither updates Jan - 10 have installed, I'm going to hand you Support MS in the hope that they can resolve the problem. See below.
That being said, is an interpretation of the 80070017 - cyclic redundancy check error "a device attached to the system does not work," which suggests that a hardware problem might be the cause of the error (although I must say that it is a very low possibility in this case).
Good luck!
=======================
Visit the Microsoft Solution Center and antivirus security for resources and tools to keep your PC safe and healthy. If you have problems with the installation of the update itself, visit the Microsoft Update Support for resources and tools to keep your PC updated with the latest updates.
~ Robear Dyer (PA Bear) ~ MS MVP (that is to say, mail, security, Windows & Update Services) since 2002 ~ WARNING: MS MVPs represent or work for Microsoft
-
Gambling problems:
UNO on the MSN web site has been unavailable for me for the past 2 days. I can't find any information on this subject anywhere.
Could you please let me know so that I will understand if the problem is with repairs or something with my computer.
Thank you
D.PottsD.Potts,
Since this is an MSN online game you should start by checking with their support. Since it's an online game, you can reset your browser and see if that helps. If you have Internet Explorer 8 and here are instructions to reset it.Mike - Engineer Support Microsoft Answers
Visit our Microsoft answers feedback Forum and let us know what you think. -
16 June updated blown all my documents for the last 10 days. Any solution?
Documents for the last 10 days, all my email settings, all memory of recent activity disappeared.
Hello Craig,.
Let's see if the files are actually missing or if they are hidden:
Best regards
Matthew_Ha
-
For the last 8 days the font size will increase from 100% to 75%. This happens automatically. I am not able to change the font size to 100% the normal way. On the desktop, I right click and try to enlarge the icons without result. In Explorer I go down to the bottom right to change the zoom level and try to change the font, nothing helps. The only way I can do it is through the system restore. Can anyone help? Dogscout
t-4-2
Changed the dpi that did not work. Police accounted for 70% this morning. I had to use the system again restore.
Suggestions...
1 make a check of the file system.
Start button > Search box type cmd > look up, do a RIGHT click oncmd.exe > click onRun As Administrator > in this window cmd black and white, type at the prompt flashing sfc/scannow > press the ENTER key.
Note : there is a space between 'sfc' and ' / '.
To sit and wait. It will take time.
When finished, exit the cmd window.
Reboot (restart your computer)2. If the above does not solve the problem. Do a check disk.
Start button > Search box, type cmd > look up, right-click on cmd.exe > Run As Administrator > in the black and white window, at the command prompt flashes, type chkdsk/f/r > press the Enter key.
Note : there is a space between 'chkdsk' and ' / '.
The screen will say something like cannot do it now, but you want to run it on reboot. Click on 'y' as in Yes > press > window cmd of output.
Restart your computer. Check disk starts after reboot. It will take a while. DO NOT stop the machine. Just wait.t-4-2 -
To cancel light continues to Flash for the last 2 days on my HP 6500 all on the printer.
Light to cancel on my HP Office jet 6500 all-in-One Printer E709 help a series continues to Flash for the past 2 days, I changed the thinking of the ink that was the problem, but he did not. I unplugged all caps for about two minutes, then the replugged and nothing helped. I was doing a copy 2 days ago and the paper stuck, I was able to recover all of the sheet, but since then I'm unable to use the printer. I can't make copies; I can not print nor can I fax this printer. What can I do?
Bob_Headrick thanks for the info but I got intouch with the HP company directly, it seems to be a hardware problem. They no longer support this printer, but gave a good discounted price for a newer version, I'm happy with.
-
Hi people
I'm on Windows 8, and in these last days, I get this message
" " Windows Update was not able to verify the new updates for the last 30 days, go to windows update to resolve this problem"
It is on a blue banner that goes directly to the screen and it is very annoying
I get updates through so I do not understand this
Any help would be great
PS I have tryied the restoration of the system, and it's always the same
Lee was soon
Original title: looking for some help please
Hi Lee,.
I had this same problem and it drove me crazy, but I solved it.
I clicked on the link above that 'Shubham Chin"gave, and in this link all the topic, if you click on the topic" my PC is not responding all by searching for the or to install updates.
below that it will then say "try to run windows update convenience store", click on that and it should get rid of this very annoying pop to the top and other problems with your laptop... hope I helped :)
-
Single SQL query for the analysis of the date of customs declaration under the table of Stock codes
Dear all,
Please tell us a single SQL query for the below,
We have a Table of Stock as shown below,
STOCK_TABLE
ITEM_CODE
(item code)
BAT_NO
(lot no.)
TXN_CODE
(transaction code)
DOC_NO
(number)
BOE_DT
(date of the customs declaration)
I1
B1
I1
I2
I3
B70
I4
B80
I5
B90
T102
1234
JULY 2, 2015
I6
B100
We have to find the date of customs declaration (i.e. the date when the items have come under this particular table) for items that are not attached to any document (that is, who have TXN_CODE, DOC_NO and BOE_DT fields with a NULL value).
For each item in the table of actions, which is not attached to any document, the customs declaration date is calculated as follows.
- If (code section, lot number) combination is present under HISTORY_TABLE, the date of customs declaration will receive the UPDT_DT, the transaction code (TXN_CODE) is an IN or transactions (which can be analyzed from the TRANSACTIONS table).
- If (code section, lot number) combination is NOT currently at the HISTORY_TABLE (or) the transaction code respective to item - batch number combination code is an operation then customs declaration date will be the date of the document (DOC_DT) that we receive from one of the 3 tables IN_TABLE_HEAD that contains the element of that particular lot.
- If the case 1 and case 2 fails, our customs declaration date will be the last date of document (DOC_DT) that we receive from one of the 3 tables IN_TABLE_HEAD containing that particular item and the BAT_NO in expected results will be that corresponding to this document, as appropriate, to another NULL.
- If the case 1 or case 2 is successful, the value of the last field (in the output expected, shown further below) BATCH_YN will be 'Y', because it fits the lot. Otherwise it will be 'n'.
-
When you try to run the company, I received this error for the last two days. I have tried using another browser and ended in the same results.
Please try again later
We are working to improve your experience of the Enterprise Dashboard.
Hello
Your proof of cloud creative's 'VIP' instead of the company, so you would not normally manage your CC on the Enterprise Dashboard, but you had some Digital Marketing rights so that's why you have a dashboard.
I am informed that currently some adjustments are made to your dashboard for Digital Marketing and that it should end soon.
In the meantime your creative team of cloud management should be available through creative.adobe.com
HISTORY_TABLE
ITEM_CODE | BAT_NO |
TXN_CODE
DOC_NO
UPDT_DT
I1
B1
T1
1234
JANUARY 3, 2015
I1
B20
T20
4567
MARCH 3, 2015
I1
B30
T30
7890
FEBRUARY 5, 2015
I2
B40
T20
1234
JANUARY 1, 2015
TRANSACTION
TXN_CODE | TXN_TYPE |
T1 | IN |
T20 |
OFF
T30
ALL THE
T50
IN
T80
IN
T90
IN
T60
ALL THE
T70
ALL THE
T40
ALL THE
IN_TABLE_HEAD_1
H1_SYS_ID (primary key) | TXN_CODE | DOC_NO |
DOC_DATE
H1ID1
T1
1234
JANUARY 1, 2015
H1ID2
T70
1234
FEBRUARY 1, 2015
IN_TABLE_ITEM_1
I1_SYS_ID |
H1_SYS_ID
(foreign key referencing H1_SYS_ID in IN_TABLE_HEAD_1)
ITEM_CODE
I1ID1
H1ID1
I1
I1ID2
H1ID1
I100
I1ID3
H1ID2
I3
IN_TABLE_BATCH_1
B1_SYS_ID | TXN_CODE DOC_NO (now in IN_TABLE_HEAD_1) | BAT_NO |
B1ID1
T1
1234
B1 / can be empty
B1ID2
T70
1234
B70
IN_TABLE_HEAD_2
H2_SYS_ID (primary key) | TXN_CODE |
DOC_NO
DOC_DATE
H2ID1
T30
4567
FEBRUARY 3, 2015
H2ID2
T60
1234
JANUARY 3, 2015
IN_TABLE_ITEM_2
I2_SYS_ID | H2_SYS_ID (foreign key referencing H2_SYS_ID in IN_TABLE_HEAD_2) | ITEM_CODE |
I2ID1 | H2ID1 |
I1
I2ID2
H2ID1
I200
I2ID3
H2ID2
I2
IN_TABLE_BATCH_2
B2_SYS_ID |
I2_SYS_ID
(foreign key referencing I2_SYS_ID in IN_TABLE_ITEM_2)
BAT_NO
B2ID1
I2ID1
B30 / null
B2ID2
I2ID2
B90
B2ID2
I2ID3
B60
IN_TABLE_HEAD_3
H3_SYS_ID (primary key) | TXN_CODE | DOC_NO | DOC_DATE |
H3ID1 |
T50
1234
JANUARY 2, 2015
H3ID2
T80
1234
JANUARY 3, 2015
H3ID3
T90
1234
JANUARY 4, 2015
H3ID4
T40
1234
AUGUST 5, 2015
IN_TABLE_ITEM_3
I3_SYS_ID |
H3_SYS_ID
(foreign key referencing H3_SYS_ID in IN_TABLE_HEAD_3)
ITEM_CODE
BAT_NO
I3ID1
H31D1
I2
B50
I3ID2
H3ID2
I4
B40
I3ID3
H3ID3
I4
I3ID4
H3ID4
I6
There is no IN_TABLE_BATCH_3
Please find below the expected results.
OUTPUT
ITEM_CODE | BAT_NO | TXN_CODE | DOC_NO |
BOE_DT
BATCH_YN
I1
B1
T1
1234
JANUARY 3, 2015
THERE
I1
B30
T30
7890
FEBRUARY 5, 2015
N
I2
B60
T60
1234
JANUARY 3, 2015
N
I3
B70
T70
1234
FEBRUARY 1, 2015
THERE
I4
T90
1234
JANUARY 4, 2015
N
I6
T40
1234
AUGUST 5, 2015
N
Controls database to create the tables above and insert the records.
CREATE TABLE stock_table()item_code VARCHAR2()80),bat_no VARCHAR2()80),txn_code VARCHAR2()80),
doc_no VARCHAR2 (80), boe_dt DATE );
INSERT EN stock_table
VALUES ('I1', 'B1', '', '', '');
INSERT EN stock_table
VALUES ('I1', '', '', '', '');
INSERT IN stock_table
VALUES ('I2', '', '', '', '');
INSERT EN stock_table
VALUES ('I3', 'B70', '', '', '');
INSERT EN stock_table
VALUES ('I4', 'B80', '', '', '');
INSERT EN stock_table
VALUES ('I5', 'B90', 'T102', '1234', '02-JUL-2015');
INSERT EN stock_table
VALUES ('I6', 'B100', '', '', '');
SELECT *
FROM stock_table
CREATE TABLE history_table()item_code VARCHAR2()80),bat_no VARCHAR2()80),txn_code VARCHAR2()80),
doc_no VARCHAR2 (80), updt_dt DATE );
INSERT IN history_table
VALUES ('I1', 'B1', 'T1', '1234', '03-JAN-2015');
INSERT IN history_table
VALUES ('I1', 'B20', 'T20', '4567', '03-MAR-2015');
INSERT IN history_table
VALUES ('I1', 'B30', 'T30', '7890', '05-FEB-2015');
INSERT IN history_table
VALUES ('I2', 'B40', 'T20', '1234', '01-JAN-2015');
SELECT *
FROM history_table
CREATE TABLE transaction1()txn_code VARCHAR()80),txn_type VARCHAR()80));
INSERT INTO transaction1
VALUES ('T1', 'IN');
INSERT INTO transaction1
VALUES ('T20', 'OUT');
INSERT INTO transaction1
VALUES ('T30', 'ALL');
INSERT INTO transaction1
VALUES ('T40', 'ALL');
INSERT INTO transaction1
VALUES ('T50', 'IN');
INSERT INTO transaction1
VALUES ('T60', 'ALL');
INSERT INTO transaction1
VALUES ('T70', 'ALL');
INSERT INTO transaction1
VALUES ('T80', 'IN');
INSERT INTO transaction1
VALUES ('T90', 'IN');
SELECT *
FROM transaction1
CREATE TABLE in_table_head_1()h1_sys_id VARCHAR2()80) PRIMARY KEY,txn_code VARCHAR2()80),
doc_no VARCHAR2 (80), doc_dt DATE );
CREATE TABLE in_table_head_2()h2_sys_id VARCHAR2()80) PRIMARY KEY,txn_code VARCHAR2()80),
doc_no VARCHAR2 (80), doc_dt DATE );
CREATE TABLE in_table_head_3()h3_sys_id VARCHAR2()80) PRIMARY KEY,txn_code VARCHAR2()80),
doc_no VARCHAR2 (80), doc_dt DATE );
INSERT IN in_table_head_1
VALUES ('H1ID1', 'T1', '1234', '01-JAN-2015');
INSERT IN in_table_head_1
VALUES ('H1ID2', 'T70', '1234', '01-FEB-2015');
INSERT IN in_table_head_2
VALUES ('H2ID1', 'T30', '4567', '03-FEB-2015');
INSERT IN in_table_head_2
VALUES ('H2ID2', 'T60', '1234', '03-JAN-2015');
INSERT IN in_table_head_3
VALUES ('H3ID1', 'T50', '1234', '02-JAN-2015');
INSERT IN in_table_head_3
VALUES ('H3ID2', 'T80', '1234', '03-JAN-2015');
INSERT IN in_table_head_3
VALUES ('H3ID3', 'T90', '1234', '05-JAN-2015');
INSERT IN in_table_head_3
VALUES ('H3ID4', 'T40', '1234', '05-AUG-2015');
CREATE TABLE in_table_item_1()i1_sys_id VARCHAR2()80) PRIMARY KEY,
h1_sys_id VARCHAR2 (80) REFERENCES in_table_head_1()h1_sys_id),item_code VARCHAR2()80));
CREATE TABLE in_table_item_2()i2_sys_id VARCHAR2()80) PRIMARY KEY,
h2_sys_id VARCHAR2 (80) REFERENCES in_table_head_2()h2_sys_id),item_code VARCHAR2()80));
CREATE TABLE in_table_item_3(i3_sys_id VARCHAR2(80) PRIMARY KEY,
h3_sys_id VARCHAR2 (80) REFERENCES in_table_head_3()h3_sys_id),item_code VARCHAR2()80),
bat_no VARCHAR2 (80));
INSERT IN in_table_item_1
VALUES ('I1ID1', 'H1ID1', 'I1');
INSERT IN in_table_item_1
VALUES ('I1ID2', 'H1ID1', 'I100');
INSERT IN in_table_item_1
VALUES ('I1ID3', 'H1ID2', 'I3');
INSERT IN in_table_item_2
VALUES ('I2ID1', 'H2ID1', 'I1');
INSERT IN in_table_item_2
VALUES ('I2ID2', 'H2ID1', 'I200');
INSERT IN in_table_item_2
VALUES ('I2ID3', 'H2ID2', 'I2');
INSERT IN in_table_item_3
VALUES ('I3ID1', 'H3ID1', 'I2','B50');
INSERT IN in_table_item_3
VALUES ('I3ID2', 'H3ID2', 'I4','B40');
INSERT IN in_table_item_3
VALUES ('I3ID3', 'H3ID3', 'I4','');
INSERT IN in_table_item_3
VALUES ('I3ID4', 'H3ID4', 'I6','');
SELECT *
FROM in_table_item_1
SELECT *
FROM in_table_item_2
SELECT *
FROM in_table_item_3
CREATE TABLE in_table_batch_1()b1_sys_id VARCHAR2()80) PRIMARY KEY,
txn_code VARCHAR2 (80), doc_no VARCHAR2 (80), bat_no VARCHAR2 (80));
CREATE TABLE in_table_batch_2()b2_sys_id VARCHAR2()80) PRIMARY KEY,
i2_sys_id VARCHAR2 (80) REFERENCES in_table_item_2()i2_sys_id),bat_no VARCHAR2()80));
INSERT IN in_table_batch_1
VALUES ('B1ID1', 'T1', '1234', 'B1');
INSERT IN in_table_batch_1
VALUES ('B1ID2', 'T70', '1234', 'B70');
INSERT IN in_table_batch_2
VALUES ('B2ID1', 'I2ID1', 'B30');
INSERT IN in_table_batch_2
VALUES ('B2ID2', 'I2ID2', 'B90');
INSERT IN in_table_batch_2
VALUES ('B2ID3', 'I2ID3', 'B60');
Please advise a solution for the same.
Thank you and best regards,
Séverine Suresh
very forced (question subfactoring used to allow easy testing/verification - could work with these test data only)
with
case_1 as
(select s.item_code,
s.bat_no,
h.txn_code,
h.doc_no,
h.updt_dt boe_dt,
cases where s.bat_no = h.bat_no then 'Y' else ' n end batch_yn.
cases where h.txn_code is not null
and h.doc_no is not null
and h.updt_dt is not null
then 'case 1' '.
end refers_to
from (select item_code, bat_no, txn_code, doc_no, boe_dt
of w_stock_table
where bat_no is null
or txn_code is null
or doc_no is null
or boe_dt is null
) s
left outer join
w_history_table h
On s.item_code = h.item_code
and s.bat_no = h.bat_no
and exists (select null
of w_transaction1
where txn_code = nvl (s.txn_code, h.txn_code)
and txn_type in ('IN', 'ALL')
)
),
case_2 as
(select s.item_code,
NVL (s.bat_no, h.bat_no) bat_no.
NVL (s.txn_code, h.txn_code) txn_code.
NVL (s.doc_no, h.doc_no) doc_no.
NVL (s.boe_dt, h.updt_dt) updt_dt.
cases where s.bat_no = h.bat_no then 'Y' else ' n end batch_yn.
cases where h.txn_code is not null
and h.doc_no is not null
and h.updt_dt is not null
then 'case 2'.
end refers_to
from (select item_code, bat_no, txn_code, doc_no, boe_dt
of case_1
where refers_to is null
) s
left outer join
w_history_table h
On s.item_code = h.item_code
and exists (select null
of w_transaction1
where txn_code = nvl (s.txn_code, h.txn_code)
and txn_type in ('IN', 'ALL')
)
and not exists (select null
of case_1
where item_code = h.item_code
and bat_no = h.bat_no
and txn_code = h.txn_code
and doc_no = h.doc_no
and updt_dt = h.updt_dt
)
),
case_31 as
(select s1.item_code,
NVL (S1.bat_no, W1.bat_no) bat_no.
NVL (S1.txn_code, W1.txn_code) txn_code.
NVL (S1.doc_no, W1.doc_no) doc_no.
NVL (S1.updt_dt, W1.doc_dt) updt_dt.
cases where s1.bat_no = w1.bat_no then 'Y' else ' n end batch_yn.
cases where w1.txn_code is not null
and w1.doc_no is not null
and w1.doc_dt is not null
then "case 31'.
end refers_to
from (select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn, refers_to
of case_2
where refers_to is null
) s1
left outer join
(select i1.item_code, h1.txn_code, h1.doc_no, h1.doc_dt, b1.bat_no
of w_in_table_item_1 i1
inner join
w_in_table_head_1 h1
On i1.h1_sys_id = h1.h1_sys_id
inner join
w_in_table_batch_1 b1
On h1.txn_code = b1.txn_code
and h1.doc_no = b1.doc_no
) w1
On s1.item_code = w1.item_code
),
case_32 as
(select s2.item_code,
NVL (S2.bat_no, W2.bat_no) bat_no.
NVL (S2.txn_code, W2.txn_code) txn_code.
NVL (S2.doc_no, W2.doc_no) doc_no.
NVL (S2.updt_dt, W2.doc_dt) updt_dt.
cases where s2.bat_no = w2.bat_no then 'Y' else ' n end batch_yn.
cases where w2.txn_code is not null
and w2.doc_no is not null
and w2.doc_dt is not null
then "case 32'.
end refers_to
from (select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn, refers_to
of case_2
where refers_to is null
) s2
left outer join
(select i2.item_code, h2.txn_code, h2.doc_no, h2.doc_dt, b2.bat_no
of w_in_table_item_2 i2
inner join
w_in_table_head_2 h2
On i2.h2_sys_id = h2.h2_sys_id
inner join
w_in_table_batch_2 b2
On i2.i2_sys_id = b2.i2_sys_id
) w2
On s2.item_code = w2.item_code
),
case_33 as
(select s3.item_code,
w3.bat_no,
NVL (S3.txn_code, w3.txn_code) txn_code.
NVL (S3.doc_no, w3.doc_no) doc_no.
NVL (S3.updt_dt, w3.doc_dt) updt_dt.
cases where s3.bat_no = w3.bat_no then 'Y' else ' n end batch_yn.
cases where w3.txn_code is not null
and w3.doc_no is not null
and w3.doc_dt is not null
then "case 33'.
end refers_to
from (select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn, refers_to
of case_2
where refers_to is null
) s3
left outer join
(select i3.item_code, h3.txn_code, h3.doc_no, h3.doc_dt, i3.bat_no
of w_in_table_item_3 i3
inner join
w_in_table_head_3 h3
On i3.h3_sys_id = h3.h3_sys_id
) w3
On s3.item_code = w3.item_code
)
Select item_code, bat_no, txn_code, doc_no, boe_dt, batch_yn
of case_1
where refers_to is not null
Union of all the
Select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn
of case_2
where refers_to is not null
Union of all the
Select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn
from (select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn,
ROW_NUMBER() over (partition by item_code of updt_dt desc order) rn
from (select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn
of case_31
where refers_to is not null
Union of all the
Select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn
of case_32
where refers_to is not null
Union of all the
Select item_code, bat_no, txn_code, doc_no, updt_dt, batch_yn
of case_33
where refers_to is not null
)
)
where rn = 1
ITEM_CODE | BAT_NO | TXN_CODE | DOC_NO | BOE_DT | BATCH_YN |
---|---|---|---|---|---|
I1 | B1 | T1 | 1234 | JANUARY 3, 2015 | THERE |
I1 | B30 | T30 | 7890 | FEBRUARY 5, 2015 | N |
I2 | B60 | T60 | 1234 | JANUARY 3, 2015 | N |
I3 | B70 | T70 | 1234 | FEBRUARY 1, 2015 | THERE |
I4 | - | T90 | 1234 | JANUARY 5, 2015 | N |
I6 | - | T40 | 1234 | AUGUST 5, 2015 | N |
Concerning
Etbin
Maybe you are looking for
-
I use iphone 6s does not have singnal
I use the version of the 6s 9.3.2 iphone (13F69) and the carrier is Zain KSA 24.1 but phone is not take signal
-
How to restore my toolbar. Nothing happens when I press ALT or f10
My toolbar disappeared last night. The instructions on the Web site are not helping to restore. I am very close to another browser
-
I'm trying to get my e-mail Sympatico to automatically transfer or appear on my gmail account, but do not know how to do this.
-
Photo Story 3-How do to remove the silent space between tracks
I use Photo Story 3 to make a video. I've imported all the photos and added 7 different pieces of music. The program automatically leaves a silent space between pieces of music. If an image has no music to accompany it. How delete/erase this sile
-
Hi all I am compiling my project with compiler 1.4 and unfortunately I can't change his version sources cause are adjusted to this version. However I use Multimap in my code: _contacts = new MultiMap(); .. Keys enumeration = _contacts.keys ();While (