mysql每天有限计数
我想为每个日期选择前3行*注意2月5日有4行,我在想它是否可以计数或限制,但没有任何运气。 我一直在寻找解决办法,但没有任何运气。大多数情况下,我真的很想知道它是否能够使用MySQL,或者我是否需要在PHP中执行一些日期检查,以从结果中删除不需要的行 我的实际目标是:mysql每天有限计数,mysql,date,count,limit,Mysql,Date,Count,Limit,我想为每个日期选择前3行*注意2月5日有4行,我在想它是否可以计数或限制,但没有任何运气。 我一直在寻找解决办法,但没有任何运气。大多数情况下,我真的很想知道它是否能够使用MySQL,或者我是否需要在PHP中执行一些日期检查,以从结果中删除不需要的行 我的实际目标是: user_id | date_time | journal_id 1 | 2014-02-04 11:15:00 | 21 1 | 2014-02-04 11:25:00 |
user_id | date_time | journal_id
1 | 2014-02-04 11:15:00 | 21
1 | 2014-02-04 11:25:00 | 22
1 | 2014-02-04 14:00:00 | 31
1 | 2014-02-05 10:15:00 | 33
1 | 2014-02-05 12:55:00 | 45
1 | 2014-02-05 15:15:00 | 48
1 | 2014-02-05 15:35:00 | 49
1 | 2014-02-06 05:00:00 | 62
1 | 2014-02-06 13:40:00 | 67
1 | 2014-02-06 15:00:00 | 72
有什么想法吗?工作解决方案:
user_id | date_time | journal_id
1 | 2014-02-04 11:15:00 | 21
1 | 2014-02-04 11:25:00 | 22
1 | 2014-02-04 14:00:00 | 31
1 | 2014-02-05 10:15:00 | 33
1 | 2014-02-05 12:55:00 | 45
1 | 2014-02-05 15:15:00 | 48
1 | 2014-02-06 05:00:00 | 62
1 | 2014-02-06 13:40:00 | 67
1 | 2014-02-06 15:00:00 | 72
您可能想尝试以下方法 创建一个存储过程,其中光标是日期 从具有限制的表中选择行,并将这些结果复制到新表中 举一个我将如何做到这一点的例子: 创建过程在TABLENAME VARCHAR50中显示第一行 声明varsqlvarchar255; 声明varDATE VARCHAR100; 在默认值0中声明没有更多行; 声明游标1游标,用于从日志中选择不同的日期\时间; 为未找到的集合声明继续处理程序no_more_rows=1; 打开游标1; 将cursor1提取到varDATE中; 重复 将@varSQL=CONCATINSERT设置为newTable SELECT*FROM logs,其中DATEdate\u time=,varDATE,LIMIT 0,3; 从@varSQL准备stmt; 执行stmt; 将cursor1提取到varDIR中; 直到没有更多行=1结束重复; 关闭游标1;
结束如果我理解正确,您希望显示该表中的前四行……是的。它可以通过MySQL实现。这个问题的解决方案在这里和其他地方都得到了广泛的讨论。毫无疑问,有人会在一分钟内提供另一行。@jmail:我想要9行,每天的前3行。
user_id | date_time | journal_id
1 | 2014-02-04 11:15:00 | 21
1 | 2014-02-04 11:25:00 | 22
1 | 2014-02-04 14:00:00 | 31
1 | 2014-02-05 10:15:00 | 33
1 | 2014-02-05 12:55:00 | 45
1 | 2014-02-05 15:15:00 | 48
1 | 2014-02-06 05:00:00 | 62
1 | 2014-02-06 13:40:00 | 67
1 | 2014-02-06 15:00:00 | 72
select user_id, date_time, journal_id from (
select
user_id, date_time, journal_id
, @crid:=
(case when @pdt=(@cdt:=date_format(date_time, '%Y-%m-%d'))
then (@crid+1)
else (@pdt:=@cdt)/@pdt
end) as grouped_row_num
from logs, ( select @crid:=0, @cdt:=0, @pdt:=0 ) r
) results
where grouped_row_num <= 3
;