当前位置: 首页 > 面试题库 >

从数据库中获取每天登录的用户名

申屠无尘
2023-03-14
问题内容

我有这个数据库结构

username   logged_in            logged_out
------------------------------------------
user1      2011-04-03 19:32:01  2011-04-05 03:41:34
user2      2011-04-01 10:33:42  2011-05-01 23:15:23

我需要的是在特定日期登录的所有用户的列表,例如

day           logged users
2011-04-01    user2
2011-04-02    user2
2011-04-03    user2
2011-04-03    user1
2011-04-04    user2
2011-04-04    user1
2011-04-05    user2
2011-04-05    user1
...
2011-05-01    user2

我目前正在尝试通过单个SQL查询完成此操作,但是我真的不知道如何获取表中记录的所有时间的时间跨度以及如何将其连接到登录的用户。

我最大的问题是如何创建数据库中所有时间的“虚拟”表…


问题答案:
DECLARE @from_date DATETIME, @to_date DATETIME

-- populate @from_date and @to_date based on reporting needs
-- possibly using MIN() and MAX() on your logged_in and logged_out fields

DECLARE
  @limit INT
SELECT
  @limit = DATEDIFF(DAY, @from_date, @to_date)
;
WITH
  calendar AS
(
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date), 0) AS date, 1 AS inc_a, 2 AS inc_b
UNION ALL
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date) + inc_a, 0), inc_a + inc_a + 1, inc_a + inc_a + 2 FROM calendar WHERE inc_a <= @limit
UNION ALL
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date) + inc_b, 0), inc_b + inc_b + 1, inc_b + inc_b + 2 FROM calendar WHERE inc_b <= @limit
)

SELECT
  calendar.date,
  your_table.username
FROM
  your_table
INNER JOIN
  calendar
    ON  calendar.date >= DATEADD(DAY, DATEDIFF(DAY, 0, your_table.logged_id), 0)
    AND calendar.date <  your_table.logged_out

编辑

CTE的二进制增长,而不是线性增长。2 ^ 100个日期应在合理范围内。



 类似资料:
  • 我目前正在处理一个在客户端初始化了firebase的应用程序。当用户通过 firebase 登录时,我想从 firestore 中获取用户的数据。我目前正在侦听器中执行此操作并成功获取用户。我想知道这是否是获取用户数据的最佳方式。我的代码如下: 我主要担心的是,每次刷新应用程序时都会获取用户的数据。关于此事的任何建议或最佳做法将不胜感激

  • 我的数据库表如下所示 我想要得到所有的一周的时间,有多少任务是在星期一,星期二...星期五创建的。如有任何帮助,我们将不胜感激。

  • 我有一个辅助项目网站,人们可以在那里评论东西,现在我需要显示用户的评论和评论者的用户名。问题是,我无法获得登录用户的用户名。 评论示例: 1) 评论人-Shelo 测试评论 2) 评论人-ProGa 测试评论2 现在的问题是,如果我试图获取“当前登录”用户的用户名,当用户登录时,两条评论都会有相同的用户名 上面的代码示例是您当前登录用户的方式。因此,如果我使用这段代码,并尝试通过

  • 我有一个登录表单,用户在其中输入用户名和密码。每个用户都有自己的级别分配和分区。 我主要担心的是,我的代码无法确定当前登录的用户是谁,因此无法获取该代码的gradeassign和sectionassign,因此将显示来自tbl_学生的所有数据。 希望你能帮我。谢谢 这是桌子的结构 tbl_用户 清华大学学生 如果用户XXX登录,则获取的结果和日期必须为: 这是用户登录会话的代码。 和Pass='“

  • 问题内容: 如何获取Java中的用户名/登录名? 这是我尝试过的代码… 我在尝试运行此代码时得到提示。有人可以告诉我我是否朝着正确的方向前进,并帮助我理解问题。 问题答案:

  • 我想用我自己的数据库中的数据制作登录表单。我创建了实体用户类: UPD:解决了!我不知道为什么和怎么做。我发现hibernate创建了新表“auth_data”,但没有使用我的表“auth_data”。因此,我将“auth_data”重命名为“auth_data”,现在开始工作了!我还在@data上更改了@getter@setter,在用户存储库中更改了“User findByUsername(S