即使每天获得1条记录也包含2条不同的记录

时间:2012-07-17 06:12:11

标签: sql sql-server-2008

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

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。

2 个答案:

答案 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)

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