SQL query to determine Fiscal Week
Hi Experts,
I need to figure out the fiscal week for a specific datetime field based on the following requirements:
1. A week Starts on Saturday and Ends on Friday.
2. If Feb 1st of a given year is a Saturday, then week 1 will run from February 1st to February 7.
3. If Feb 1st is not on a Saturday, then week 1 starts on the previous Saturday and ends on the first Friday of February
Example 1: February 1st 2011 is on a tuesday so Week 1 will be from Jan 29th (Saturday) to February 4 (Friday). Week 52 of 2011 will be from Jan 21, 2012 (Saturday) to Jan 27, 2012 (Friday)
Example 2: February 1st 2014 is on a Saturday so Week 1 will be from February 1st to February 7.
I am looking for some sql or pl sql to get the week number. Any help will be greatly appreciated
Hi,
Welcome to the forum!
Here's a PL/SQL function that returns the beginning of the fiscal year which contains a given date, in_date:
CREATE OR REPLACE FUNCTION fiscal_year_begin
( in_date IN DATE DEFAULT SYSDATE
RETURN DATE
DETERMINISTIC
AS
return_date DATE;
next_fiscal_year_begin DATE;
BEGIN
return_date := NEXT_DAY ( ADD_MONTHS ( TRUNC ( ADD_MONTHS (in_date, -1)
, 'YEAR'
, 1
) - 7
, 'SATURDAY'
IF TO_CHAR (in_date, 'MM-DD') BETWEEN '01-26'
AND '01-31'
THEN
next_fiscal_year_begin := fiscal_year_begin (in_date + 7);
IF in_date >= next_fiscal_year_begin
THEN
return_date := next_fiscal_year_begin;
END IF;
END IF;
RETURN return_date;
END fiscal_year_begin
/Here's how it works:
First, it finds the Saturday on or before February 1 in the same calendar year as in_date (or, if in_date is in January, the previous calendar year). In most cases, this will be the beginning of the fiscal year.
The only exceptions are the days between January 26 amd January 31, inclusive. These days could be in the following fiscal year, so we check when that fiscal year begins and, if that date is less than in_date, the later date will be the one returned.
To find the week number of a given date a_date, you can use this formula:
1 + FLOOR ( (a_date - fiscal_year_begin (a_date))
/ 7
)which finds how may days have passed since the beginning of the fiscal year, dvides by 7 to get the number of completed weeks (0-52), and adds 1 to get the number of the week in progress.
You may want to write another function that does that forumula
You could do the whole job in pure SQL, but it would be messy, and you'd have to copy that messy calculation in every query that used the fiscal year, which I imagine will be a lot of places.
If the PL/SQL function proves to be too slow, you could use it to populate a table that contained the fiscal year starting points for all years in which you might be interested, and join to that table. You could also include every week in that table.
Here's some code I wrote to test the function:
CREATE TABLE table_x
AS
SELECT DATE '2011-01-26' AS a_date FROM dual UNION ALL
SELECT DATE '2011-01-31' FROM dual UNION ALL
SELECT DATE '2011-02-01' FROM dual UNION ALL
SELECT DATE '2011-02-02' FROM dual UNION ALL
SELECT DATE '2011-02-08' FROM dual;
INSERT INTO table_x (a_date)
WITH cntr AS
SELECT LEVEL AS n
FROM dual
CONNECT BY LEVEL <= 10
SELECT ADD_MONTHS (x.a_date, 12 * c.n)
FROM table_x x
CROSS JOIN cntr c
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YYYY Day';
SELECT a_date
, fiscal_year_begin (a_date) AS year
, 1 + FLOOR ( (a_date - fiscal_year_begin (a_date))
/ 7
) AS week
FROM table_x
ORDER BY a_date;Output:
A_DATE YEAR WEEK
26-Jan-2011 Wednesday 30-Jan-2010 Saturday 52
31-Jan-2011 Monday 29-Jan-2011 Saturday 1
01-Feb-2011 Tuesday 29-Jan-2011 Saturday 1
02-Feb-2011 Wednesday 29-Jan-2011 Saturday 1
08-Feb-2011 Tuesday 29-Jan-2011 Saturday 2
26-Jan-2012 Thursday 29-Jan-2011 Saturday 52
31-Jan-2012 Tuesday 28-Jan-2012 Saturday 1
01-Feb-2012 Wednesday 28-Jan-2012 Saturday 1
02-Feb-2012 Thursday 28-Jan-2012 Saturday 1
08-Feb-2012 Wednesday 28-Jan-2012 Saturday 2
26-Jan-2021 Tuesday 01-Feb-2020 Saturday 52
31-Jan-2021 Sunday 30-Jan-2021 Saturday 1
01-Feb-2021 Monday 30-Jan-2021 Saturday 1
02-Feb-2021 Tuesday 30-Jan-2021 Saturday 1
08-Feb-2021 Monday 30-Jan-2021 Saturday 2Whenever you post a question on this forum, it helps if you also post some sample data (CREATE TABLE and INSERT statements) and the results you want from that data, like I just did.
Similar Messages
-
Sql query with dynamic fiscal year
Hi,
I wrote this query with static fiscal year and fiscal period, I need info on making the variables dynamic
Fiscal year : starts from July1st. So this year until June'30 it is '2011' and from July'1st its '2012'
Fiscal period: July1st its '1' and June'1st its '12'
Query:
select distinct o.c_num, o.ac_num, s.sub_ac_num, o.fiscal_year, o.ac_exp_date, s.sub_ac_ind
from org_account o
left outer join sub_account s
on o.c_num = s.c_num and o.ac_num = s.ac_num
where (o.ac_exp_date >= CURRENT_DATE or o.ac_exp_date is null)
and o.fiscal_year = *'2011'* --> need to be dynamic
and o.fiscal_period = *'12'* --> need to be dynamic
thanks,
Mano
Edited by: user9332645 on Jun 2, 2011 6:55 PMHi, Mano,
Welcome to the forum!
Whenever you have a question, please post a little sample data (CREATE TABLE and INSERT statements), and the results you want from that data.
Always say which version of Oracle you're using.
Since this is your first thread, I'll post some sample data for you:
CREATE TABLE table_x
( dt DATE
INSERT INTO table_x (dt) VALUES (DATE '2010-12-31');
INSERT INTO table_x (dt) VALUES (DATE '2011-01-01');
INSERT INTO table_x (dt) VALUES (DATE '2011-06-02');
INSERT INTO table_x (dt) VALUES (DATE '2011-06-30');
INSERT INTO table_x (dt) VALUES (DATE '2011-07-01');Is this the output you would want from that data?
DT FISCAL_YEAR FISCAL_PERIOD
31-Dec-2010 2011 06
01-Jan-2011 2011 07
02-Jun-2011 2011 12
30-Jun-2011 2011 12
01-Jul-2011 2012 01If so, here's one way to get it:
SELECT dt
, TO_CHAR ( ADD_MONTHS (dt, 6)
, 'YYYY'
) AS fiscal_year
, TO_CHAR ( ADD_MONTHS (dt, 6)
, 'MM'
) AS fiscal_period
FROM table_x
ORDER BY dt
;Since your fiscal year starts 6 months before the calendar year, you need to add 6 months to the actual date to get the fiscal year and month.
The query above produces strings for fiscal_year and fiscal_period. If you'd rather have NUMBERs, then use EXTRACT instead of TO_CHAR:
SELECT dt
, EXTRACT ( YEAR
FROM ADD_MONTHS (dt, 6)
) AS fiscal_year
, EXTRACT ( MONTH
FROM ADD_MONTHS (dt, 6)
) AS fiscal_period
FROM table_x
ORDER BY dt
;The first query will work in Oracle 6 (and higher).
I'm not sure when EXTRACT was introduced. It definitely works in Oracle 10, and may be available in earlier versions, too. -
Creating SQL Query to determine similar customers
I have a table that contains two columns: CustomerID and ItemID.
There are 480 CustomerIDs and more than 5000 ItemIDs. The table shows what all items have been bought by each customer.
I need to write a procedure where i can determine which all customers are 'Like Customers' (It means if a Customer C1 buys Items A, B and C where another customer C2 buys A, B, C, D, E then we can say that C1 and C2 are 'Like Customers' since, they both
bought A, B, C. It is also possible that both the customers bought B,C,D or C,D,E or any other combination)
I would also like to know whether this kind of problem can be better solved in SSMS or SQL Server Business Intelligence Devp Studio (using data mining techniques)?For future reference, posting DDL and providing sample data makes it easier to answer your questions...
Anyway, based on the size of your table, simple T-SQL should do the trick.
-- a little test data.
CREATE TABLE #temp (
CustomerID INT,
ProductID INT
INSERT #temp (CustomerID,ProductID) VALUES
(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(2,4),
(2,5),
(2,6),
(2,7),
(3,2),
(3,3),
(3,8),
(3,9),
(4,10),
(4,11),
(4,12),
(4,13),
(5,1),
(5,2),
(5,12),
(5,13),
(6,1),
(6,5),
(6,7),
(6,10),
(7,1),
(7,2),
(7,3),
(7,4),
(7,5)
-- the actual solution
SELECT
t1.CustomerID AS Customer1,
t2.CustomerID AS Customer2,
COUNT(*) AS CommonItemCount
FROM
#temp t1
JOIN #temp t2
ON t1.CustomerID < t2.CustomerID
AND t1.ProductID = t2.ProductID
GROUP BY
t1.CustomerID,
t2.CustomerID
HAVING
COUNT(*) >= 2 -- set this to whatever threashold value you deem as "similar"
ORDER BY
t1.CustomerID,
t2.CustomerID
HTH,
Jason
Jason Long -
UCM Data Dictionary SQL Query for Determining IP Address
Forum,
I am trying to determine the IP address(es) of the UCM cluster servers. Using the UCM Data Dictionary and tables such as 'processnode' will provide information such as
procnodename description isactive macaddr procnodeid systemnode typenodename typeprocessnode
================================= ========================== ======== ======= ========== ========== ============ ====================
EnterpriseWideData t 1 t Subscriber CUCM Voice/Video
usa109-s4pub01 UCM 10.0 Publisher t 2 f Publisher CUCM Voice/Video
usa109-s4sub01 UCM 10.0 Subscriber t 3 f Subscriber CUCM Voice/Video
usa109-s4cup01.lab.shoregroup.com UC Presence 10.0 Publisher t 9 f Publisher CUCM IM and Presence
usa109-s4cup02.lab.shoregroup.com UC Presence 10.0 Publisher t 11 f Subscriber CUCM IM and Presence
'callmanager' table does not provide a field for IP...'processnode' only had 'ipv6name' field...
If the node using DNS to resolve name-to-IP as shown above...I have not found a way to obtain the IP address of the UCM node itself. I know I can go to the CLI of a node a issue a command to obtain...but I have not found a Data Dictionary table to obtain the results.
I am open for suggestions...thx.If, in CCMAdmin, you've got server hostnames rather than IP addresses, CallManager will use DNS to get the IP addresses of the other servers.
GTG -
Resolve column names in a sql Query
Hi Folks,
I’m upgrading an application and there are database columns that have major changes that could affect production reports. I would like to survey v$SQL for a few days to see if these columns are affected. Here’s the problem.
Looking at a SQL query to determine which columns are used is not nearly as easy as it sounds. Are there any oracle functions or 3rd party tools that can be used to list the columns used by a sql query? (this gets extremely tricky when subqueries become involved)
For instance.
select
name, b.dep_id, employee_id
From emp a
Inner join v_department b on a.dep_id=b.dep_id
Columns used:+
Emp.name+
Departments.dep_id (under the view)+
Emp.employee_id+
Emp.dep_id (from the join)+If you're on > 10g, you can use dbms_xplan with "all" option.
It shows "column projection information" which is exactly what you want.
UKJA@ukja102> set serveroutput on
UKJA@ukja102>
UKJA@ukja102> drop table t1 purge;
Table dropped.
Elapsed: 00:00:00.03
UKJA@ukja102> create table t1(c1 int, c2 int);
Table created.
Elapsed: 00:00:00.03
UKJA@ukja102>
UKJA@ukja102> explain plan for
2 select
3 t1.c1, t1.c2, v.cnt
4 from t1,
5 (select /*+ no_merge */ c1, count(*) as cnt
6 from t1
7 group by c1) v
8 where
9 t1.c1 = v.c1
10 ;
Explained.
Elapsed: 00:00:00.01
UKJA@ukja102>
UKJA@ukja102> @plan_all
UKJA@ukja102> select * from table(dbms_xplan.display(null,null,'all'))
2 /
PLAN_TABLE_OUTPUT
Plan hash value: 536125944
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 52 | 6 (34)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 52 | 6 (34)| 00:00:01 |
| 2 | TABLE ACCESS FULL | T1 | 1 | 26 | 2 (0)| 00:00:01 |
| 3 | VIEW | | 1 | 26 | 3 (34)| 00:00:01 |
| 4 | HASH GROUP BY | | 1 | 13 | 3 (34)| 00:00:01 |
| 5 | TABLE ACCESS FULL| T1 | 1 | 13 | 2 (0)| 00:00:01 |
Query Block Name / Object Alias (identified by operation id):
1 - SEL$1
2 - SEL$1 / T1@SEL$1
3 - SEL$2 / V@SEL$1
4 - SEL$2
5 - SEL$2 / T1@SEL$2
Predicate Information (identified by operation id):
1 - access("T1"."C1"="V"."C1")
Column Projection Information (identified by operation id):
1 - (#keys=1) "T1"."C1"[NUMBER,22], "T1"."C2"[NUMBER,22],
"V"."CNT"[NUMBER,22]
2 - "T1"."C1"[NUMBER,22], "T1"."C2"[NUMBER,22]
3 - "V"."C1"[NUMBER,22], "V"."CNT"[NUMBER,22]
4 - (#keys=1) "C1"[NUMBER,22], COUNT(*)[22]
5 - "C1"[NUMBER,22]
Note
- dynamic sampling used for this statement
40 rows selected.
Elapsed: 00:00:00.01
UKJA@ukja102>
UKJA@ukja102>
UKJA@ukja102> @end
UKJA@ukja102> set echo offDion Cho -
Hi All,
I need to know how we can determine Fiscal week and also is ther any table related to it.
Please suggest.
Regards
DhirajYou can define fiscal week, you have to define fiscal year with 52 weeks so when you post it takes the 52 weeks as fiscal weeks or periods.
assign points if helpful -
SQL Query on Planning Repository
Hi all,
Let's say that I have an Entity Hierarchy as follows:
- Entity
+ E1
+ E2
+ E3
E31
E32
+ E4
E41
E42
+ E5
E6
E7
+ E8
E31 (Shared)
and we have access control set at group level:
- G1 has write access to Idesc(E1)
- G2 has write access to Idesc(E2)
- G3 has write access to Idesc(E3)
- G4 has write access to Idesc(E4)
- G5 has write access to Idesc(E5)
- G8 has write access to Idesc(E8)
I have one user U2 who belongs to G2.
How could I build a SQL query to determine if U2 has access to Base Entity E31?
I have taken a look to http://camerons-blog-for-essbase-hackers.blogspot.nl/2011/10/stupid-planning-queries-6-security.html
although we would have to check if the base entity belongs to any of the entities where U2 has access.
Thanks for any help.I believe it's commonly known that it's case sensitive. e.g. it's documented here:
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=using_recordsets_7.html
"Unlike the rest of ColdFusion, Query of Queries is case-sensitive. However, Query of Queries supports two string functions, UPPER() and LOWER(), which you can use to achieve case-insensitive matching." -
Best method to determine the week number of a month - SQL Server 2012
Hi,
I'm searching the most valid and tested method to determine the week number respect to a month.
Fe, the 1st January falls in the 1st week of January, the 1st February fall in the 1st week of February, and so on.
I've found many solutions but I'd like to know possibly the best one.
ThanksHi Uri,
SELECT DATEPART(week, '20150104')
- DATEPART(week, CONVERT(CHAR(6), '20150104', 112)+'01')
+ 1
returns 2 and not 1. It's a Sunday.
Waiting to be spoonfed, eh?
The one-off in my query would be very simple to figure out - I forgot to add the +1. Is too much to expect from you that you could figure it out yourself?
And likewise, in my post I said that you should use "week" for weeks starting on Sunday, and "iso_week" if your week starts on Monday. Uri neglected to observe this, but you had the information to correct it. If you had been interested
in doing some work yourself, that is.
Nevertheless, there is an issue that I overlooked:
DECLARE @day date = '20160105'
SELECT datepart(iso_week, @day) -
datepart(iso_week, convert(char(6), @day, 112) + '01') + 1
This returns -51. This is because with ISO week numbering, Jan 1st falls into week 53 of the previous year, if it's on a Friday or later. Week 1 is always the week of Jan 4th. When you week this does not happen, as week 1 is always the week with Jan
1st. (Dec 31st is always in week 53 or 54.)
To correct for this, we need this query:
SELECT DATEPART(iso_week, @day) -
CASE WHEN DATEPART(iso_week, CONVERT(CHAR(6), @day, 112) + '01') < 50
THEN DATEPART(iso_week, CONVERT(CHAR(6), @day, 112) + '01')
ELSE 1
END + 1
Erland Sommarskog, SQL Server MVP, [email protected] -
How to find first and last date of a fiscal week using SQL
Hello,
I want information about FISCAL Week, means a Week based on ISO standard. I know format strings ‘IW’ or ‘IYYY’ gives fiscal week and fiscal year respectively from a given date. But I want to find the first and last date of a fiscal week. Say suppose I have a fiscal week is 2, and fiscal year is 2008, how to find the start and end date of the given fiscal week.
Any kind of help would be greatly appreciable.
Thanks,
Princedavide gislon wrote:
The following query evaluate the begin of a fisical week, where &year and &week are respectively the year and week you want to calculate.
To evaluate the end of the week you have to add 6.
Note that my database is set to have monday as day number 1 of the week, and sunday as day number 7; if your database settings are different you should modify the query accordingly.
SELECT CASE TO_CHAR(TO_DATE('&year','YYYY'),'D')
WHEN '1' THEN TO_DATE('&year','YYYY')+((&week-1)*7)
WHEN '2' THEN TO_DATE('&year','YYYY')+((&week-1)*7-1)
WHEN '3' THEN TO_DATE('&year','YYYY')+((&week-1)*7-2)
WHEN '4' THEN TO_DATE('&year','YYYY')+((&week-1)*7-3)
WHEN '5' THEN TO_DATE('&year','YYYY')+((&week-1)*7+3)
WHEN '6' THEN TO_DATE('&year','YYYY')+((&week-1)*7+2)
WHEN '7' THEN TO_DATE('&year','YYYY')+((&week-1)*7+1)
END BEGIN_FISICAL_WEEK
FROM DUAL
Hope this is helpful.
Cheers,
Davide
Edited by: davide gislon on 08-Jan-2009 07:19Your query does nothing you say it does. TO_DATE('&year','YYYY') returns first day of the current month for year &year. And the only reason it returns January 1, &year is that we are currently in January:
SQL> select TO_DATE('&year','YYYY') from dual
2 /
Enter value for year: 2005
old 1: select TO_DATE('&year','YYYY') from dual
new 1: select TO_DATE('2005','YYYY') from dual
TO_DATE('
01-JAN-05
SQL> As soon as we roll into February:
SQL> alter system set fixed_date = '2009-2-1' scope=memory
2 /
System altered.
SQL> select sysdate from dual
2 /
SYSDATE
01-FEB-09
SQL> select TO_DATE('&year','YYYY') from dual
2 /
Enter value for year: 2005
old 1: select TO_DATE('&year','YYYY') from dual
new 1: select TO_DATE('2005','YYYY') from dual
TO_DATE('
01-FEB-05
SQL> alter system set fixed_date = NONE scope=both
2 /
System altered.
SQL> select sysdate from dual
2 /
SYSDATE
08-JAN-09
SQL> But even if TO_DATE('&year','YYYY') would always return January 1, &year, or you would fix it to TO_DATE('0101&year','MMDDYYYY') it still would be wrong. ISO week rules are
If January 1 falls on a Friday, Saturday, or Sunday, then the week including January 1 is the last week of the previous year, because most of the days in the week belong to the previous year.
If January 1 falls on a Monday, Tuesday, Wednesday, or Thursday, then the week is the first week of the new year, because most of the days in the week belong to the new year.Therefore, next year:
SQL> DEFINE YEAR=2010
SQL> DEFINE WEEK=1
SQL> ALTER SESSION SET NLS_TERRITORY=GERMANY -- enforce Monday as first day of the week
2 /
Session altered.
SQL> SET VERIFY OFF
SQL> SELECT CASE TO_CHAR(TO_DATE('0101&&year','MMDDYYYY'),'D')
2 WHEN '1' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7)
3 WHEN '2' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7-1)
4 WHEN '3' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7-2)
5 WHEN '4' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7-3)
6 WHEN '5' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7+3)
7 WHEN '6' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7+2)
8 WHEN '7' THEN TO_DATE('0101&&year','MMDDYYYY')+((&&week-1)*7+1)
9 END BEGIN_FISICAL_WEEK
10 FROM DUAL
11 /
BEGIN_FI
04.01.10
SQL> SELECT TRUNC(TO_DATE('0101&&year','MMDDYYYY'),'IW') FROM DUAL
2 /
TRUNC(TO
28.12.09
SQL> 2 user10772980:
Use:
SELECT TRUNC(TO_DATE('0101&&year','MMDDYYYY'),'IW') + (&&week-1)*7 FISCAL_YEAR_&&YEAR._WEEK_&&WEEK
FROM DUAL
FISCAL_YEAR_2010_WEEK_1
28.12.09
SQL> SY. -
How to determine a sql query size to display a progress bar
I would like to show a progress of an sql query within a jsp page.
Background:
I have a reporting web application, where over 500 contacts can run reports based on different criteria such as date range....
I current display a message stating 'executng query please wait', however the users (hate users) do not seem to wait, thereofore they decide to run the query all over again which affected my reportign sever query size (eventually this crashes, stopping all reports)
Problem:
The progress bar is not a problem, how would I determine the size of the query at runtime therefore adding the time onto my progress bar.Yes it's doable (we do it) but it sure ain't easy.
We've got about 23,500,000 features (and counting) in a geodata database. Precise spatial selection algorithms are expensive. Really expensive.
We cannot impose arbitrary limits on search criteria. If the client requires the whole database we are contractually obligated to provide it...
For online searches We use statistics to approximate the number of features which a given query is likely to return... more or less the same way that the query optimiser behind any half decent (not mysql (5 alteast)) database management system does.
We have a batch job which records how many features are linked to each distinct value of each search criteria... we just do the calculations (presuming a normal (flat) distribution) and...
... if the answer is more than a 100,000 we inform the user that the request must be "batched", and give them a form to fill out confirming there contact details. We run the extract overnight and send the user an email containing a link which allows them to download the result the next morning.
... if the answer is more than a million features we inform the user that the request must batched over the weekend... same deal as above, except we do it over the weekend to (a) discourage this; and (b) the official version ensure we have enough time to run the extract without impinging upon the maintenance window.
... if the answer is more than 5 million we display our brilliant "subscribe to our DVD service to get the latest version of the whole shebang every three months (or so), so you can kill your own blooody server with these ridiculous searches" form.
Edited by: corlettk on Dec 5, 2007 11:12 AM -
Hi,
This is my First table: REPORT
with report as (
select 'vendor_1' as vendor,to_date('1/1/2012','DD/MM/YYYY') supply_date, 'customer_1'as customer,'item_1' as item1, 110 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/3/2012','MM/DD/YYYY') supply_date,'customer_1'as customer, 'item_1' as item1,120 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/3/2012','MM/DD/YYYY') supply_date, 'customer_1'as customer, 'item_1' as item1,130 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/4/2012','MM/DD/YYYY') supply_date,'customer_1'as customer, 'item_1' as item1,140 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/10/2012','MM/DD/YYYY') supply_date, 'customer_1'as customer, 'item_1' as item ,200as cost from dual union all
select 'vendor_1' as vendor,to_date('1/23/2012','MM/DD/YYYY') supply_date, 'customer_1'as customer, 'item_1' as item,0 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/6/2012','MM/DD/YYYY') supply_date,'customer_2'as customer, 'item_1' as item1,160 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/7/2012','MM/DD/YYYY') supply_date,'customer_2'as customer, 'item_1' as item1,170 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/8/2012','MM/DD/YYYY') supply_date,'customer_2'as customer, 'item_1' as item1,180 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/9/2012','MM/DD/YYYY') supply_date,'customer_2'as customer,'item_1' as item1,190 as cost from dual union all
select 'vendor_1' as vendor,to_date('1/20/2012','MM/DD/YYYY') supply_date,'customer_2'as customer,'item_1' as item1,300 as cost from dual)
THIS IS MY SECOND TABLE: TEMP_WEEK
WITH temp_week a s(
SELECT '01/01/2012 to 07/01/2012' AS week from dual union all
SELECT '08/01/2012 to 14/01/2012' AS week from dual union all
SELECT '15/01/2012 to 21/01/2012' AS week from dual union all
SELECT '22/01/2012 to 28/01/2012' AS week from dual union all
SELECT '29/01/2012 to 31/01/2012' AS week from dual)
To find weekly sales i have wrote below query:
SELECT week,vendor,customer,SUM (cost)
FROM ( SELECT week,vendor,customer,SUM (cost) cost
FROM (SELECT CASE
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 1 AND 7 THEN
'01/01/2012 to 07/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 8 AND 14 THEN
'08/01/2012 to 14/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 15 AND 21 THEN
'15/01/2012 to 21/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 22 AND 28 THEN
'22/01/2012 to 28/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 29 AND 31 THEN
'29/01/2012 to 31/01/2012'
END
week,vendor,customer,cost
FROM report)
GROUP BY week, vendor, customer
UNION ALL
SELECT tw.week,vendor,customer,0
FROM ( SELECT week,vendor,customer,SUM (cost) cost
FROM (SELECT CASE
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 1 AND 7 THEN
'01/01/2012 to 07/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 8 AND 14 THEN
'08/01/2012 to 14/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 15 AND 21 THEN
'15/01/2012 to 21/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 22 AND 28 THEN
'22/01/2012 to 28/01/2012'
WHEN TO_NUMBER (TO_CHAR (TRUNC (supply_date), 'DD')) BETWEEN 29 AND 31 THEN
'29/01/2012 to 31/01/2012'
END
week,vendor,customer,cost
FROM report)
GROUP BY week, vendor, customer),temp_week tw)
GROUP BY week, vendor, customer
ORDER BY vendor, customer, week ;
with above query i am getting below output:
with output as(
select '01/01/2012 to 07/01/2012' as week,'vendor_1' as vendor,'customer_1' as customer, 500 as cost from dual union all
select '08/01/2012 to 14/01/2012' as week,'vendor_1' as vendor,'customer_1' as customer, 200 as cost from dual union all
select '15/01/2012 to 21/01/2012' as week,'vendor_1' as vendor,'customer_1' as customer, 0 as cost from dual union all
select '22/01/2012 to 28/01/2012' as week,'vendor_1' as vendor,'customer_1' as customer, 0 as cost from dual union all
select '29/01/2012 to 31/01/2012' as week,'vendor_1' as vendor,'customer_1' as customer, 0 as cost from dual union all
select '01/01/2012 to 07/01/2012' as week,'vendor_1' as vendor,'customer_2' as customer, 330 as cost from dual union all
select '08/01/2012 to 14/01/2012' as week,'vendor_1' as vendor,'customer_2' as customer, 370 as cost from dual union all
select '15/01/2012 to 21/01/2012' as week,'vendor_1' as vendor,'customer_2' as customer, 300 as cost from dual union all
select '22/01/2012 to 28/01/2012' as week,'vendor_1' as vendor,'customer_2' as customer, 0 as cost from dual union all
select '29/01/2012 to 31/01/2012' as week,'vendor_1' as vendor,'customer_2' as customer, 0 as cost from dual )
Clearly I have used cross join. But I want to get same output with some other way. I dont want to use cross join and Union
please help me in this.DUPLICATE!
SQL Query help. -
Send mail weekly with spreadsheet generated from SQL query
I have a requirement which is as follows
1 - Run an SQL query to generate a report (lets say select * from emp;)
2 - Save the report output in a excel (csv/xls/xlsx) and send as a mail attachment.
3 - Schedule this procedure as a weekly job.
#3 Job scheduling is simple and can be done but i am stuck with #1 and #2. How can I go about this?Hello,
the FAQ of this forum space has a whole section about Re: 5. How do I read or write an Excel file?
And as Karthik said: you can search this forum, all of your question where asked and answered many times.
Regards
Marcus -
How to build an SQL Query to print Week ranges of a Month
Hi Gurus!!
I have a requirement to create a query to display the Week periods of a month.
The inputs will be Year and month.
The result should be some thing like this:
If Year = 2009 and Month = June
The SQL Query should return the following:
01-Jun-2009 to 06-Jun-2009
07-Jun-2009 to 13-Jun-2009
14-Jun-2009 to 20-Jun-2009
21-Jun-2009 to 27-Jun-2009
27-Jun-2009 to 30-Jun-2009
I am confused how to do this. Please help me. Any help would be grately Appreciated.
Thanks
AhmedThis is how My Final Query Looks Like:
SELECT TO_CHAR(SYSDATE+7*(level-1),'DD-MON-RRRR')
||' to '
||TO_CHAR(SYSDATE+7*(level-1)+6,'DD-MON-RRRR') RANGES
FROM dual
connect by level<=5
--Ahmed -
Dear All,
I have a requirement, to write a SQL query to populate the records which are inserted less than 10 no of records.
The tables has the cretaed_date column and along with other key column which will have unique values.
Ex1: The user might have inserted records from application, per week basis, between the date range '01-jun-2013' - 08-jun-2013 , the no of records created by the user during this week may be less than 10 records or more.
But I want to populate the records by giving date range that too, it should pick the records the count which fall with in 10 records.
I dont want the query to populate the records if the user has inserted more than 10 records in a week.
Ex2:
User 1 has created 15 records during the week 1 ( the query should not populate this ).
User 2: has cretaed less than 10 records from the UI during the week 2. ( This details should get populated ).
ThanksUse COUNT to find how many rows where inserted in a week.
If this does not answer your question then please read Re: 2. How do I ask a question on the forums? And provide necessary details. -
Determining the parameters passed in a Discoverer Report through SQL query
Hi,
I want to know the parameters passed in a Discoverer Report through a SQL query.
i.e if we pass the Report name (Workbook Name) then we get the paramaters used .
Is there any way we can do this.
Any help will be really appreciated.
Thanx in advance
AnkurHi
You can indeed get the parameters from the EUL5_QPP_STATS table, although they are extremely difficult to get at.
Look at this script:
SELECT
QS.QS_DOC_OWNER USER_NAME,
QS.QS_DOC_NAME WORKBOOK,
QS.QS_DOC_DETAILS WORKSHEET,
TRUNC(QS.QS_CREATED_DATE) DOC_DATE,
*(LENGTH(TO_CHAR(EUL5_GET_ITEM_NAME(QS.QS_ID)))+1)/9 ITEMS,*
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),1, 6)) ITEM1,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),10, 6)) ITEM2,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),19, 6)) ITEM3,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),28, 6)) ITEM4,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),37, 6)) ITEM5,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),46, 6)) ITEM6,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),55, 6)) ITEM7,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),64, 6)) ITEM8,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),73, 6)) ITEM9,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),82, 6)) ITEM10,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),91, 6)) ITEM11,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),100,6)) ITEM12,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),109,6)) ITEM13,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),118,6)) ITEM14,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),127,6)) ITEM15,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),136,6)) ITEM16,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),145,6)) ITEM17,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),154,6)) ITEM18,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),163,6)) ITEM19,
EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),172,6)) ITEM20
FROM
EUL5_QPP_STATS QS--,
-- APPS.FND_USER USR
WHERE
-- QS.QS_DOC_OWNER = '#' || USR.USER_ID AND
*(LENGTH(TO_CHAR(EUL5_GET_ITEM_NAME(QS.QS_ID)))+1)/9 < 21*
AND QS.QS_CREATED_DATE > '01-JAN-2007'
What this does is return the first 20 items used in a worksheet. It does this by passing 6 characters at a time out of a cusror made up by concatenating QS_DBMP0 to QS_DBMP7 to get the Dimensions and then again by concatenating QS_MBMP0 to QS_MBMP7 to get the Measures. Having got that cursor it then takes each 6 characters and passes them to a nibble algorithm to decode the actual item. The code is extremely difficult to follow.
I mention this because other fields in the same table are QS_JBMP0 to QS_JBMP7 which I believe are Joins, and QS_FBMP0 to QS_FBMP7 which look like Filters (aka parameters) being used. I think the QS stands for Query Statistics and BMP for bitmap. Somewhere in the EUL5.SQL script is the key to unlocking this.
Good luck. The reason I say this will become apparent when you look inside EUL5.SQL.
Best wsihes
Mcihael
Maybe you are looking for
-
URL Link Difference in development and Production
Hi all , im seeing the URL for support desk BSP page different comaparing in development and production .see the below http://s01tdi135.intra.tm:8003/sap/bc/gui/sap/its/webgui?sap-language=E&sap-client=011Code=/08&pcmd=CRMVW&pnumb=45CB5F7BE4030746000
-
Need help! White screen and hard drive
I have a MacBook Pro A1211 I got off Craigslist. It needed a new logic board and hard drive so I got both. My problem is I just found out the hard drive has windows on it and when I power on the MBP all I get is a white screen. My question is is the
-
I want a calendar that will sync automatically between iphone and ipad?
I have an iphone 4 and have purchased several calendars which I use all the time. However, I would like to purchase a calendar that would sync between the iphone 4 and ipad 2. Is there such a product? Thanks.
-
The computer will be used only for online catalog access in my library. I need to remove the location toolbar, but keep the back buttons and home button. If I use Kiosk mode, I don't have the back buttons. I can set it up so that I have the buttons b
-
How to use preprocessor directives as in C?
I have a list of id's and corresponding names associated with them,i want to map the id's to the names during the first time program runs and to use the names after that instead of id's during run time(but not mapping the id to the name again and aga