计算mysql

时间:2017-09-15 15:29:36

标签: mysql sql

我有一个表格,其中包含使用以下感兴趣的列播放的歌曲列表:

id int
name varchar(255)
duration int(11)
created datetime
status varchar(255)

状态字段实际上未使用,例如它始终是new或其他东西。我想要做的是查询数据,并在created + datetime与下一首歌曲的created时间不同时,将输出中的“状态”字段覆盖为“已跳过”。 / p>

可能?我确信我可以在代码中处理这个并更新表中的状态,但我想知道如果不这样做是否可以实现。

这是我到目前为止所做的:

mysql> select id, duration, created, date_add(created, interval duration second) as projected_end, status from activity order by id desc limit 3;
+---------+----------+---------------------+----------------------------+--------+
| id      | duration | created             | projected_end              | status |
+---------+----------+---------------------+----------------------------+--------+
| 4800884 | 1119     | 2017-09-15 11:06:18 | 2017-09-15 11:24:57.000000 | new    |
| 4800842 | 1004     | 2017-09-15 11:03:36 | 2017-09-15 11:20:20.000000 | new    |
| 4800807 | 1185     | 2017-09-15 10:43:47 | 2017-09-15 11:03:32.000000 | new    |
+---------+----------+---------------------+----------------------------+--------+
    3 rows in set (0.00 sec)

因此,在这种情况下,歌曲标识4800842被跳过,因为它应该在11:20结束,但下一个在11:06开始。

我希望能够做的是根据早期曲目的statusprojected_end值的比较来改变输出中的created字段。后续跟踪。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

MySQL just released window functions

因此,您可以使用LEAD获取下一行created字段,并将其与当前行{{1}进行比较}}

例如

projected_end