3

我需要计算销售数量,并按日期汇总销售总额,很容易。但是曲线间距是 - 我需要“截止”是下午 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

转来转去,我觉得有什么东西盯着我的脸。谢谢。

4

3 回答 3

4

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

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
于 2012-08-10T17:02:43.570 回答
1

如果 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
于 2012-08-10T17:03:06.800 回答
0

怎么样:

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

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

于 2012-08-10T17:02:40.120 回答