【发布时间】:2020-08-07 11:11:11
【问题描述】:
我有两张桌子。两者都包含一个用户的条目,一个来自早上,一个来自晚上。
我试图获取天数,因此用户在早上和晚上添加了一个条目。每当有一个缺失时,“连胜”就会结束——在当天结束。所以它不介意用户是否在一年前活跃并且连续100天,它只是“用户连续多少天在morningTable和eveningTable中添加条目,返回从今天开始”。
两个表都有每个条目的时间戳。
一个例子:
morningTable:
ID text timestamp
1 bla 2020-08-07 10:30:00
2 blub 2020-08-06 11:30:00
3 abc 2020-08-05 09:20:00
4 def 2020-08-04 06:13:00
5 ghi 2020-08-02 07:05:00
eveningTable:
ID text timestamp
1 abc 2020-08-07 19:30:00
2 def 2020-08-06 20:45:00
3 ghi 2020-08-05 21:30:00
4 jkl 2020-08-03 20:13:00
5 mno 2020-08-01 17:33:00
6 pqr 2020-07-29 19:19:19
因此,对于这两个表,结果必须是数字 3,因为两个表都连续 05.08 - 07.08...
希望你能理解我的情况。
我找到了带有 ROWNUMBER 的示例来查找差距等,但是,很难将它与两个表结合起来。
谁能帮我看看如何用 MySQL 做到这一点?
虽然我也只是在 PHP 中收集所有数据并在那里执行,但是,当数据增长时,使用 MySQL(数据库端)执行它会比在 PHP 中执行要好得多。
提前致谢!
【问题讨论】:
-
如果有 2 个连续的周期,分别为 3 天和 4 天,期望的输出是多少?
-
精确指定您的 DBMS 及其版本。
-
@Akina 两张桌子都必须有连胜,所以如果一张桌子有 3 连胜,另一张有 4 连胜,那么它将是 3。事情是从当天返回, 检查下一个条目是否来自两个表中的最后一天,如果不是 -> streak = 0,如果是,则 streak=1,然后转到下一个条目,再次检查两个表,如果两个表中的条目都来自当天before -> streak = 2,否则 streak=1,等等。
-
@Akina 我正在使用 mysql Ver 15.1 Distrib 10.1.45-MariaDB,用于 debian-linux-gnu (x86_64),使用 readline 5.2
-
没有。如果两个表具有相同的连续 3 天周期,而另一个(稍后或更早)又具有一个连续 4 天的周期怎么办?在这种情况下你需要什么?最伟大的(4)?至少(3)?总和(7)?前/后周期长度?
标签: mysql sql database mariadb