选择每天记录创建顺序的行

时间:2013-12-06 12:50:35

标签: php mysql sql count subquery

我想从我的表中选择所有行,但也包含该行创建日中每行的值。

更详细:“那天的第一张唱片,那天的第二张唱片”。

例如,假设我的表有行:

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,或者我可以为每条记录选择先前的记录计数,但我担心如果为每一行运行此子查询会减慢响应速度。

任何替代方案或建议?

1 个答案:

答案 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

检查数据以查看效果影响。