数据库数据:
id | account | date | random_data
1 | 1 | 01/01/2013 | qw
2 | 2 | 05/01/2013 | er
3 | 2 | 09/01/2013 | ty
4 | 1 | 05/01/2013 | ui
5 | 2 | 11/01/2013 | op
6 | 1 | 12/01/2013 | as
嗨,假设我想要从 05/01/2013 开始的记录 - 请注意,第一行的 prev_date 仍然显示早于 05/01 的日期,这意味着仍然需要搜索整个表。
结果数据:
account | cur_date | random_data | prev_date | prev_rand_data
1 | 05/01/2013 | ui | 01/01/2013 | qw
1 | 12/01/2013 | as | 05/01/2013 | ui
2 | 05/01/2013 | er | null | null
2 | 09/01/2013 | ty | 05/01/2013 | er
2 | 11/01/2013 | op | 09/01/2013 | ty
所以我不确定我可以为此使用的最好、最优化的查询是什么。我不反对 php 解决方案,但不确定那会好多少。我考虑过的一些想法:
- 在同一张桌子上进行某种连接 - 不知道如何
选择上的子查询 -
select date as cur_date , (select max(date) from table where date < cur_date group by account) as prev_date...
- 这似乎是非常密集的会话变量 - 在每一行上设置一个会话变量,这将是下一行的先前数据,例如
select date as cur_date , @prev_date as prev_date , @prev_date:=date...
有没有人遇到过这样的问题,有没有好的解决方案?我的任何想法是否有任何积极的消极因素可能会在未来引起问题?