mysql - 求一条SQL语句.
ringa_lee
ringa_lee 2017-04-17 13:44:11
[MySQL讨论组]
id date
1  '5-1'
1  '7-20'
1  '6-2'
2  '5-4'
2  '3-2'

如何得到根据先后时间的次数:

id date   cunt
1  '5-1'   1   
1  '6-2'   2
1  '7-20'  3
2  '3-2'   1
2  '5-4'   2

有办法实现吗?希望大家能帮我写的通用一点,因为还会根据ID去关联user这张表.

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
PHP中文网
SET @num=0;
SET @col=-1;
SELECT 
    `id`, 
    `date`,
    IF(@col!=`id`,@num:=1,@num:=@num+1),
    @col:=id
 FROM 
     t 
 ORDER BY `id`, `date` ASC
 
 

CREATE TABLE `t` (
  `id` int(32) NOT NULL,
  `date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `t`(`id`,`date`) values (1,'2016-01-20 15:34:54'),(1,'2016-01-19 15:36:27'),(1,'2016-01-04 15:36:34'),(1,'2016-01-06 15:36:38'),(2,'2016-01-11 15:36:43'),(2,'2016-01-04 15:36:49'),(2,'2016-01-30 15:36:54');

查询语句
这个语句效率很低,生产环境建议不要使用。本着学习的精神,完成你的需求。

SELECT t1.*,COUNT(t1.n) FROM 
    (SELECT @num:=@num+1 AS n,t.*  FROM (SELECT @num:=0) n,t  ORDER BY t.id ASC,DATE ASC ) AS t1 
LEFT JOIN
    (SELECT @f:=@f+1 AS m,t.*  FROM (SELECT @f:=0) n,t  ORDER BY t.id ASC,DATE ASC ) AS t2
ON 
    t1.id = t2.id
WHERE 
    t1.n>=t2.m GROUP BY t1.n 
    
    
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号