我有一个表格,其中包含使用以下感兴趣的列播放的歌曲列表:
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开始。
我希望能够做的是根据早期曲目的status
和projected_end
值的比较来改变输出中的created
字段。后续跟踪。
感谢任何帮助,谢谢!
答案 0 :(得分:1)
MySQL just released window functions!
因此,您可以使用LEAD
获取下一行行created
字段,并将其与当前行{{1}进行比较}}
例如
projected_end