繁体   English   中英

T-SQL选择每日总计但每天截止不是午夜

[英]T-SQL select daily totals BUT daily cut off is not midnight

我需要计算销售数量,并按日期总计销售总额,这很容易。 但曲线间距是 - 我需要“截止”为下午6点而不是午夜。

前一天下午6点至下午6点。

扔我的是“分组”。 我的计数只是拉动真实日期而不是“下午6点”信息。

Sort30   Day30      Total                 Counter
-------- ---------- --------------------- -----------
20120810 08/10/2012 675.32                9
20120809 08/09/2012 1314.68               16

查询:

SELECT top 30 CONVERT(VARCHAR(8), chickendate, 112) AS varSort30, 
CONVERT(VARCHAR(10), chickendate, 101) AS varDay30,
SUM(CAST(transAmount AS money)) AS varTotal, 
Count(chickendate) AS varCounter
FROM CHICKEN
WHERE 
    (chickendate >= dateadd(hour, 18, dateadd(day, datediff(day, 0, chickendate), -1))  AND 
    chickendate < dateadd(hour, 18, dateadd(day, datediff(day, 0, chickendate), 0))) 
GROUP BY CONVERT(VARCHAR(8), chickendate, 112), 
    CONVERT(VARCHAR(10), chickendate, 101)
ORDER BY CONVERT(VARCHAR(8), chickendate, 112) DESC

四处走动,我觉得它的某些东西盯着我的脸。 谢谢。

如果我的逻辑是正确的,这应该给你正确的结果:

SELECT TOP 30
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30, 
    CONVERT(VARCHAR(10), modifiedChickenDate, 101) AS varDay30,
    SUM(CAST(transAmount AS money)) AS varTotal, 
    COUNT(modifiedChickenDate) AS varCounter
FROM (
    SELECT
        transAmount,
        DATEADD(HOUR, 6, chickendate) AS modifiedChickenDate
    FROM CHICKEN
) sub
GROUP BY
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30, 
    CONVERT(VARCHAR(10), modifiedChickenDate, 101) AS varDay30,
ORDER BY
    CONVERT(VARCHAR(8), modifiedChickenDate, 112) AS varSort30

如果chickendate是DATETIME而不是DATE,那么你可以使用

GROUP BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101)

提前6​​小时(截止时间比午夜提前6小时,或下午6点),然后在一年中的一天进行分组。 这只适用于您存储时间信息的情况,我不确定您是谁。 为必要的表发布一些模式。 但我认为你在寻找......

SELECT TOP 30 CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101) as Date
        , SUM(CAST(transAmount as money)) AS Total
        , Count(*) as Counter
    FROM Chicken
    GROUP BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101)
    ORDER BY CONVERT(VARCHAR(10), DATEADD(hh, 6, chickendate), 101) DESC

怎么样:

GROUP BY CONVERT(VARCHAR(8), dateadd(hour, 6, chickendate), 112)

所以'2012-08-09 18:00:00'20120810分组, '2012-08-09 17:59:59'20120809分组。

暂无
暂无

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

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