【问题标题】:SQL Query to SUM(*) for each day of this week本周每一天的 SQL 查询到 SUM(*)
【发布时间】:2017-09-09 20:48:36
【问题描述】:

我有一个应用程序可以让用户扫描徽标并赢得“积分”。他们每天可以扫描不止一次。我正在尝试编写一个查询来返回本周每一天的总分。到目前为止,我能够返回一周中每一天的所有记录。挑战在于如何计算每天的总分。到目前为止,这是我所拥有的:

SET DATEFIRST 1 -- Beginning of week is Monday
SELECT ScanID, UserID, DateTime, BeerID, BrewerID, Points 
FROM SmartTappScanLog
WHERE DateTime >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
  AND DateTime <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))
  AND UserID = '1' AND BeerID = '3'
  ORDER BY DateTime ASC

因此,如果星期一有两次扫描分别获得 2 分和 5 分,我想为星期一返回 7。 谢谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您需要一个聚合。像这样的东西每天会在数据中得到一行:

    SELECT CAST(Datetime as date) as date, UserID, BeerID, SUM(Points) as points
    FROM SmartTappScanLog
    WHERE DateTime >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) AND
          DateTime <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate())) AND
          UserID = 1 AND BeerID = 3
    GROUP BY CAST(Datetime as date), UserID, BeerID
    ORDER BY MIN(DateTime) ASC;
    

    如果您想在输出中显示星期几,请使用 datepart()datename() 获取。

    【讨论】:

    • 这太棒了!我唯一要做的就是添加 AS Date 和 AS Points 以添加这些列名称。太感谢了!! 6 分钟内无法接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多