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 つのレコードを返します。1 人のユーザー ( UserID) が 1 日に 2 つの異なる場所に移動できるためです。

たとえば、このユーザーは、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

しかし、その操作は 1 日だったので、1 つのレコードを取得したいと考えています。

どうすれば入手できますか?

私はMSSQLを使用しています。StartTime は SQL の日時です。

4

2 に答える 2

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
于 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 に答える