2011-08-16 75 views
2

我在RDBMS中有一個記錄用戶登錄的表。 用戶可以在白天多次登錄系統,我的應用程序會記錄這些登​​錄信息。
問題是,我需要一個查詢它得到每天第一次登錄編寫類似2011-04-21所需日期之間的用戶於2011-07-08如何在日期範圍內每天首次登錄用戶

登錄日誌表

userID Login Date 
guess 2011-04-21 16:46:46.000 
Admin 2011-05-03 17:32:15.000 
guess 2011-05-05 15:48:54.000 
guess 2011-06-01 14:14:50.000 
guess 2011-06-01 14:23:18.000 
my_user 2011-07-08 15:42:20.000 
guess 2011-07-08 16:15:08.000 
guess 2011-07-08 16:19:14.000 
my_user 2011-07-08 16:36:45.000 
my_user 2011-07-08 16:37:41.000 
my_user 2011-07-08 16:42:21.000 

查詢應該得到如下面的結果(第一個登錄日期/時間的每一天)

UserID First_Login_Date 
guess 2011-04-21 16:46:46.000 
Admin 2011-05-03 17:32:15.000 
guess 2011-05-05 15:48:54.000 
guess 2011-06-01 14:14:50.000 
my_user 2011-07-08 15:42:20.000 
guess 2011-07-08 16:15:08.000 
+2

哪個RDBMS? SQL Server/MySQL /等 –

回答

4
SELECT UserID, MIN(Login_Date) as First_Login_Date 
FROM Login 
WHERE Login_Date BETWEEN inputStartDate AND inputEndDate 
GROUP BY UserID, YEAR(Login_Date), MONTH(Login_Date), DAY(Login_Date) 

艾迪結束BY用戶和一天。您的問題並不是特定的,您希望每個用戶在他們登錄的每一天都進行首次登錄。如果您需要不同的RDBMS評論,我肯定此解決方案適用於MS SQL Server 2005+。

如果您想進行分組更多的選擇在某一日期,隨便看at this article.

+0

是這就是我要求的! Thx和問候! – zapoo

+1

說實話,你的問題說:「...一個查詢,獲取用戶之間的第一次登錄之間的期望日期之間2011-04-21至2011-07-08」所以我想你想在一段時間內的第一次登錄,而不是按登錄日分組。 –

+2

@伯恩哈德我猜根據他對其他答案的回答以及他說他想要的結果集,這是OP的意圖。問題中肯定不明確。 –

0

因爲我不知道你的確切數據庫系統,對MS SQL 2008以下應該工作(我還假設你正在使用paameters進行查詢):

declare @startDate datetime = '2011-04-21' 
declare @endDate datetime = '2011-07-08' 
SELECT UserId, MIN([Login Date]) as First_Login_date FROM LoginTable WHERE [Login date] between @startDate and @endDate group by UserId 
0

看來你需要找到第一個用戶登錄每一天。對於Oracle這應該工作:

select UserID, min(Login_Date) from your_table 
WHERE Login_Date between to_date('YYYY-MM-DD', '2011-04-21') 
      and to_date('YYYY-MM-DD', '2011-07-08') 
group by UserID, to_char(Login_Date, 'YYYYMMDD'); 
0

試試這個

SELECT HOUR(LOGIN_TIME), COUNT(*) FROM SESSION_DETAILS 
GROUP BY HOUR(LOGIN_TIME) 
相關問題