我在 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
Run Code Online (Sandbox Code Playgroud)
查询应该给出如下结果(每天的第一次登录日期/时间)
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
编辑为按用户和日期分组。您的问题并不具体,即您希望每个用户每天登录时第一次登录。我肯定此解决方案适用于 MS SQL Server 2005+,如果您需要不同的 RDBMS,请发表评论。
如果您想要更多按特定日期分组的选项,请随时查看本文。