简体   繁体   English

按用户定义的日期分区sql

[英]Partition by user defined dates sql

I have a table which gives unit sales of different items by day. 我有一张桌子,可以按日列出不同商品的单位销售额。 I want to sum the sales for a number of user-defined (effectively arbitrary, no way to specify directly from the data) periods. 我想对多个用户定义(实际上是任意的,无法直接从数据中指定)期间的销售额进行汇总。

I'm trying to do this by creating a field that specifies whether what period date is within, then I can group by this. 我正在尝试通过创建一个字段来指定此日期,该字段是否指定在哪个日期范围内,然后可以对此进行分组。 However my code is giving me the error "ORA-00923: FROM keyword not found where expected". 但是我的代码给我错误“ ORA-00923:在期望的位置找不到FROM关键字”。

MY CODE: 我的密码:

select
SUM(UNIT_SALES),
PERIOD =
    CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
    END
FROM MY_SALES_DAILY
GROUP BY PERIOD
ORDER BY PERIOD

How can I achieve this sum for user-defined periods? 如何在用户定义的时间段内获得该总和?

Your syntax is incorrect. 您的语法不正确。 PERIOD = is incorrect. PERIOD =不正确。 See the corrected SQL below. 请参阅下面的更正的SQL。

select
SUM(UNIT_SALES),
    CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
    END AS PERIOD
FROM DW_MASTER_SALES_DAILY
GROUP BY     CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
             END
ORDER BY PERIOD

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM