有一张表格显示员工的日常计划。
SELECT COUNT(*) AS TotalDay FROM [User]
INNER JOIN [x] ON [x].UserID = [User].ID
WHERE
StartTime BETWEEN '20120611' AND '20120618' AND UserID = 20
GROUP BY [User].ID, [User].Name
ORDER BY Name
它返回7条记录。因为在一天内,一个用户(UserID)可以去两个不同的地方。
例如, 这个用户从20120611 08:30:00到20120611 13:30:00去了一个地方 从20120611 14:00:00到20120611 19:00:00去了B地方
当我使用下面的查询时,这会返回2条记录。
SELECT COUNT(*) AS TotalDay FROM [User]
INNER JOIN [x] ON [x].UserID = [User].ID
WHERE
StartTime = '20120611' AND UserID = 20
GROUP BY [User].ID, [User].Name
ORDER BY Name
但我希望得到一条记录,因为这些操作是在一天之内。
那我怎么能得到它?
我使用的是MSSQL。 StartTime是sql中的datetime。
答案 0 :(得分:0)
你需要按datepart分组吗?
SELECT COUNT(*) AS TotalDay FROM [User]
INNER JOIN [x] ON [x].UserID = [User].ID
WHERE
StartTime = '20120611' AND UserID = 20
GROUP BY [User].ID, [User].Name, cast(floor(cast(starttime as float)) as datetime)
ORDER BY Name
答案 1 :(得分:0)
在where子句中尝试以下内容:
DATEADD(DD, DATEDIFF(DD, 0, STARTTIME), 0) BETWEEN DATEADD(DD, DATEDIFF(DD, 0, <DATE_TIME_PARAMETER>), 0) AND DATEADD(DD, DATEDIFF(DD, 0, <DATE_TIME_PARAMETER>), 0)
您还需要按上述日期部分对结果进行分组。