Sql 如何获得日期范围内用户每天的首次登录

Sql 如何获得日期范围内用户每天的首次登录,sql,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

我在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
查询应给出如下结果(每天的首次登录日期/时间)

编辑为按用户和日期分组。您的问题没有具体说明您希望每个用户在登录的每一天都进行第一次登录。我肯定此解决方案适用于MS SQL Server 2005+,如果您需要不同的RDBMS,请发表评论


如果您想在某个日期获得更多分组选项,请随意查看

,因为我不知道您的确切数据库系统,对于MS SQL 2008,以下内容应该可以使用(我还假设您使用paameters进行查询):


似乎您每天都需要找到第一个用户登录。对于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');
试试这个

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

哪种关系数据库管理系统?SQL Server/MySQL/etcYes这就是我想要的!!谢谢,谢谢!!老实说,你的问题是:“…一个查询,它获取用户在所需日期(如2011-04-21至2011-07-08)之间的首次登录”,所以我认为你希望在一段时间内首次登录,而且没有按登录日期分组。@Bernhard根据OP对其他答案的反应和他说想要的结果集,我猜这是OP的意图。这个问题肯定不清楚。
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 
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');
SELECT HOUR(LOGIN_TIME), COUNT(*) FROM SESSION_DETAILS
GROUP BY HOUR(LOGIN_TIME)