如何在日期范围内每天首次登录用户

时间:2011-08-16 16:55:33

标签: sql

我在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

4 个答案:

答案 0 :(得分: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用户和日。您的问题并不是特定的,您希望每个用户在登录的每一天都首次登录。我很肯定这个解决方案适用于MS SQL Server 2005+,如果您需要不同的RDBMS,请注释。

如果您想要在特定日期之前分组更多选项,请随时查看at this article.

答案 1 :(得分: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 

答案 2 :(得分: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');

答案 3 :(得分:0)

试试这个

SELECT HOUR(LOGIN_TIME), COUNT(*) FROM SESSION_DETAILS
GROUP BY HOUR(LOGIN_TIME)