【问题标题】:MySQL usage by dayMySQL 每天使用情况
【发布时间】:2020-03-30 23:05:57
【问题描述】:

我有一张这样的桌子

+----+----------+--------+
| ID |   Date   | Amount |
+----+----------+--------+
|  1 | 1/1/2020 |     40 |
|  1 | 1/2/2020 |     50 |
|  2 | 1/3/2020 |     10 |
+----+----------+--------+

为 ID 1 列出的第一个日期将是他们的第一个订单处理日期。第二次约会将是他们的第二次约会。每个 ID 可以有多个处理日期。 ID 2 的处理日期是他们的第一个处理日期。可能存在每个 ID 不进行处理的日期,下一个日期距上一个最大日期数天(例如 2020 年 1 月 2 日 -> 2020 年 2 月 15 日)。

我需要一个输出,其中 ID 1 的列显示按天处理的数量,如从开始的天数定义的那样。例如,ID 1 的最小日期为 40,最小日期 +1 50,头脑日期 + 2 0。 ID 2 将具有 min date 10、min date +1 0、min date + 2 0 等。

输出如下所示

+----+---------+--------+
| ID |   Day   | Amount |
+----+---------+--------+
|  1 | 1       |     40 |
|  1 | 2       |     50 |
|  2 | 1       |     10 |
+----+---------+--------+

如何解决这个问题?

【问题讨论】:

  • 请以表格文本形式向我们展示您期望的结果。添加更多数据行也可能很有用。

标签: mysql sql


【解决方案1】:

您似乎希望通过增加day 来对具有相同id 的记录进行排名。

如果您正在运行 MySQL,这正是 row_number() 所做的:

select t.*, row_number() over(partition by id order by day) new_id
from mytable t

您可能还想查看rank()dense_rank(),具体取决于您希望如何管理潜在联系(即具有相同idday 的记录)。

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2011-08-28
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2012-11-02
    相关资源
    最近更新 更多