0

有一个表格显示员工的日常计划。

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 去 A 地,从 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 中的日期时间。

4

2 回答 2

0

你需要按日期分组吗?

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
于 2012-07-17T06:32:43.653 回答
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)

您还需要按上述日期部分对结果进行分组。

于 2012-07-17T06:35:01.687 回答