从另一个表中获取两个日期之间的sql记录

hl0ma9xz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(237)

我现在正试着围绕着一些我正试图构建的sql进行思考。我有两张这样的表:

Audit Table
id | user | action | date
---+------+--------+--------------------
 1 | dave | LOGIN  | 2020-01-01 00:00:00
 2 | dave | VIEW   | 2020-01-01 00:01:00
 3 | dave | LOGIN  | 2020-01-02 00:00:00
etc..

Page Analytics Table
id | user | page    | access date
-----------------------------------------
 1 | dave | home    | 2020-01-01 00:00:30
 2 | dave | account | 2020-01-01 00:00:45
 3 | dave | about   | 2020-01-02 00:00:30

我试图捕获每个用户每天登录然后访问特定页面的次数。
我并不期待一个特别的解决办法,但可能有一些我错过了。我想我最好建立一个临时表,其中包含以下内容(从审计表收集):

id | user | login_start         | login_end
-----------------------------------------------------
 1 | dave | 2020-01-01 00:00:00 | 2020-01-02 00:00:00
 2 | dave | 2020-01-02 00:00:00 | 2020-01-02 00:00:30

然后使用这个表,加入页面分析,计算这几天之间的访问量,然后检查这个计数是否大于0。
我只是想在创建这个中间表的过程中绞尽脑汁。我走错路了吗?有更好的解决方案吗?
提前谢谢。。

qyuhtwio

qyuhtwio1#

您可以从分析表中获取页数,非常简单,如下所示:

SELECT DATE(`access date`) `access date`,
       page,
       user,
       COUNT(*) hits
  FROM analytics
 GROUP BY DATE(`access date`), page, user

如果还希望在摘要中包含登录名,可以使用union all来完成此操作(https://www.db-fiddle.com/f/64yhcewc1kjxfyejjqdazv/2)

SELECT * FROM (
    SELECT DATE(`access date`) date,
           CONCAT('viewed ', page) event,
           user,
           COUNT(*) hits
      FROM analytics
     GROUP BY DATE(`access date`), page, user
     UNION ALL
     SELECT DATE(date) date,
           'logged in' event,
           user,
           COUNT(*) hits
      FROM audit
     WHERE action = 'LOGIN'
     GROUP BY DATE(date), user
  ) summary
  ORDER BY date, user, event

结果:

| date       | event          | user | hits |
| ---------- | -------------- | ---- | ---- |
| 2020-01-01 | logged in      | dave | 1    |
| 2020-01-01 | viewed account | dave | 1    |
| 2020-01-01 | viewed home    | dave | 1    |
| 2020-01-02 | logged in      | dave | 1    |
| 2020-01-02 | viewed about   | dave | 1    |

不过,我在猜测您的登录/注销要求。

相关问题