我有一个应用程序,使用户可以扫描徽标并赢得"积分"。他们每天可以扫描一次以上。我试图写一个查询,返回本周每一天的总积分。到目前为止,我能够返回一周中每一天的所有记录。挑战在于如何总计每天的总积分。以下是我到目前为止的情况:
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。 感谢。
答案 0 :(得分:4)
您需要汇总。像这样的东西每天会在数据中获得一行:
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()
来获取它。