Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择SQL中按周分组的数据_Sql_Oracle_Datepart - Fatal编程技术网

选择SQL中按周分组的数据

选择SQL中按周分组的数据,sql,oracle,datepart,Sql,Oracle,Datepart,我有一个工作查询(oraclesql),它按存储编号对加仑数进行分组,并按类型和百分比列对加仑数进行求和。每个门店编号都有一个不同的转换日期,我从该日期开始汇总数据- SELECT StoreNbr, SUM(CASE WHEN(ClrntSys IN ('844', '84448')) THEN Gallons ELSE 0 END) AS Gallons_844, SUM(CASE WHEN(ClrntSys ='GIC') THEN Gallons ELSE 0 END) AS Gall

我有一个工作查询(oraclesql),它按存储编号对加仑数进行分组,并按类型和百分比列对加仑数进行求和。每个门店编号都有一个不同的转换日期,我从该日期开始汇总数据-

SELECT StoreNbr, 
SUM(CASE WHEN(ClrntSys IN ('844', '84448')) THEN Gallons ELSE 0 END) AS Gallons_844,
SUM(CASE WHEN(ClrntSys ='GIC') THEN Gallons ELSE 0 END) AS Gallons_GIC,
SUM(CASE WHEN(ClrntSys IN ('844', '84448', 'GIC')) THEN Gallons ELSE 0 END) AS Total_Gallons,
CONCAT(CAST((SUM(CASE WHEN(ClrntSys ='GIC') THEN Gallons ELSE 0 END) /
SUM(CASE WHEN(ClrntSys IN ('844', '84448', 'GIC')) THEN Gallons ELSE 0 END)) AS DECIMAL (5,2)) * 100, '%') AS Percent_GIC
FROM MQ_CDS_NETTRAN
WHERE ClrntSys IN ('844', '84448', 'GIC')
AND ((CostCenter = '701104' AND LastTranDate >= DATE '2020-03-10') 
OR (CostCenter = '701109' AND LastTranDate >= DATE '2020-03-04')
OR (CostCenter = '701257' AND LastTranDate >= DATE '2020-03-12'))
GROUP BY StoreNbr
ORDER BY StoreNbr;
我现在还需要每周总结一下,周日是每周的第一天,但我很难理解DATEPART是如何工作的。为了得到更好的想法,我只尝试使用我在网上看到的DATEPART示例总结上周的数据,但这不起作用。它给了我“无效的标识符日期部分”-


然而,我真正需要的是每周的数据(周日是每周的开始)分别汇总到每个商店的转换日期。有可能吗?除了DATEPART,还有其他更好的方法吗?

对不起,我注意到你说的是Oracle SQL,我的第一个答案是SQL Server!出现错误的原因是DATEPART不是Oracle函数。相反,您可以简单地计算日期,使用已知的星期日(在DB表中已知的第一个日期之前)作为锚定日期:

SELECT
    '30-DEC-2018' as "Known Sunday,
    trunc((sysdate - to_date('30-DEC-2018')) / 7) as "Week Num",
    to_date('30-DEC-2018') 
        + (trunc((sysdate - to_date('30-DEC-2018')) / 7) * 7)"
FROM
    dual

您好@BigRedEO您使用什么数据库?为了回答这个问题,了解您的数据库管理系统对我们来说很重要<代码>日期部分(20年5月17日,一周)看起来大错特错。5/17/20 = 0.0147058823. 我怀疑你是不是想算计这事。您可能想要
DATEPART(一周,日期'2020-05-14')
,但我不能确定,我也不知道您的DBMS认为一周的第一天是什么。请添加示例数据和预期结果,这样我们肯定能够理解
每周分别汇总的数据返回到每个商店的转换日期。
。ORACLE SQL,这就是您要找的吗?谢谢-能够通过使用同一表中的特定日期列重新修改TRUNC以在查询中工作,分组和排序,以获得我需要的数据!
SELECT
    '30-DEC-2018' as "Known Sunday,
    trunc((sysdate - to_date('30-DEC-2018')) / 7) as "Week Num",
    to_date('30-DEC-2018') 
        + (trunc((sysdate - to_date('30-DEC-2018')) / 7) * 7)"
FROM
    dual