您可以通過用戶名提取DateTime和組的日期部分使用則DateDiff的最小值/最大值:
表和數據設置:
create table UserLog (Username nvarchar(50), LogDate DateTime);
insert into UserLog Values('Test1', '2012-01-01 00:00:00');
insert into UserLog Values('Test2', '2012-01-01 00:00:02');
insert into UserLog Values('Test1', '2012-01-01 00:00:05');
insert into UserLog Values('Test3', '2012-01-01 00:00:06');
insert into UserLog Values('Test3', '2012-01-01 00:01:26');
insert into UserLog Values('Test3', '2012-01-01 00:03:22');
insert into UserLog Values('Test3', '2012-01-01 00:05:42');
insert into UserLog Values('Test3', '2012-01-01 00:00:06');
insert into UserLog Values('Test1', '2012-01-02 00:01:01');
insert into UserLog Values('Test2', '2012-01-02 00:02:50');
insert into UserLog Values('Test1', '2012-01-02 00:01:01');
然後可以選擇如下:
select UserName, CAST(LogDate AS DATE) as BusinessDay,
MIN(LogDate) as FirstLogEntry, MAX(LogDate) as LastLogEntry,
DATEDIFF(second,MIN(LogDate), MAX(LogDate)) as ElapsedSeconds
FROM UserLog
GROUP BY Username, CAST(LogDate AS DATE)
這將產生以下結果,您可以從秒計算小時數。我發現秒基礎上擴大了與TEST3用戶的樣本數據:
UserName BusinessDay FirstLogEntry LastLogEntry ElapsedSeconds
-------- ----------- ----------------------- ----------------------- --------------
Test1 2012-01-01 2012-01-01 00:00:00.000 2012-01-01 00:00:05.000 5
Test2 2012-01-01 2012-01-01 00:00:02.000 2012-01-01 00:00:02.000 0
Test3 2012-01-01 2012-01-01 00:00:06.000 2012-01-01 00:05:42.000 336
Test1 2012-01-02 2012-01-02 00:01:01.000 2012-01-02 00:01:01.000 0
Test2 2012-01-02 2012-01-02 00:02:50.000 2012-01-02 00:02:50.000 0
「我想查詢應由天分組相同的用戶名兩行之間總結DateDiff的。」可能不會。如果我在午夜後登錄幾分鐘,然後在下一個午夜之前再次登錄幾分鐘,那麼該算法將顯示幾乎24小時而不是4或5分鐘。 –
在表格中插入一行是非常糟糕的。只需插入並記錄他們登錄時的開始時間,並定期更新結束時間。這樣,你知道他們在你的網站上花了多長時間。 –
現在,我並不是說這是一種跟蹤用戶的好方法,但是我有一個類似於此的問題。我基本上把這一天分成幾分鐘,並在那一分鐘內檢查「準時」。 http://stackoverflow.com/questions/761700/how-can-i-check-for-average-concurrent-events-in-a-sql-table-based-on-the-date – scottm