我想从我的表中选择所有行,但也包含该行创建日中每行的值。
更详细:“那天的第一张唱片,那天的第二张唱片”。
例如,假设我的表有行:
name | created_at
-----------------
john | 2013-02-04 10:00
bob | 2013-02-04 14:00
dale | 2013-02-05 09:00
lucy | 2013-02-06 11:00
sean | 2013-02-06 13:00
sal | 2013-02-06 18:00
因此,当我选择所有这些值时,我需要结果为:
name | created_at | which_record
---------------------------------------
john | 2013-02-04 10:00 | 1
bob | 2013-02-04 14:00 | 2
dale | 2013-02-05 09:00 | 1
lucy | 2013-02-06 11:00 | 1
sean | 2013-02-06 13:00 | 2
sal | 2013-02-06 18:00 | 3
有没有办法获得这个which_record
值而不选择值并再次计算每个记录或复杂的子查询?
我可以选择all并为每条记录生成此which_record
,或者我可以为每条记录选择先前的记录计数,但我担心如果为每一行运行此子查询会减慢响应速度。
任何替代方案或建议?
答案 0 :(得分:4)
试试这个:
SELECT id, name, created_at,
IF(@prev = date(created_at), @s:=@s+1, @s:=1) AS daily_order,
@prev:=date(created_at) as dummy
FROM table1, (SELECT @s:= 0, @prev:='') s
ORDER BY created_at
工作演示:http://sqlfiddle.com/#!2/d3ad43/1
检查数据以查看效果影响。