簡體   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