mysql按组排序并查询组里前两条记录的时间差

毅拉罐 2015-11-01 02:48:11

表名adm_cplist

按cp_name分组 计算每个分组的d_time的最新的两条数据的时间差
...全文
325 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2015-11-02
  • 打赏
  • 举报
回复
select *,
(d_time-(select max(d_time) from adm_cplist where cp_name=t.cp_name and d_time<t.d_time)) as k
from adm_cplist t
where not exists (select 1 from adm_cplist where cp_name=t.cp_name and d_time>t.d_time)
Rotel-刘志东 2015-11-01
  • 打赏
  • 举报
回复
引用 1 楼 yangb0803 的回复:

SELECT DATEDIFF(t1.d_time, ifnull(t2.d_time, now())) 
(
SELECT T.* 
FROM
(
SELECT t1.*,
(SELECT COUNT(*)+1 FROM tbl01 WHERE cp_name=t1.cp_name AND d_time>t1.d_time) AS g_id
FROM adm_cplist t1
) T
WHERE T.g_id=1
) as t1
left join 
(
SELECT T.* 
FROM
(
SELECT t1.*,
(SELECT COUNT(*)+1 FROM tbl01 WHERE cp_name=t1.cp_name AND d_time>t1.d_time) AS g_id
FROM adm_cplist t1
) T
WHERE T.g_id=2
) as t2
on t1.cp_name = t2.cp_name
分拆就做。
Rotel-刘志东 2015-11-01
  • 打赏
  • 举报
回复
特别对于数据量大的时候当时系统就完了。
Rotel-刘志东 2015-11-01
  • 打赏
  • 举报
回复
对mysql搞得这么复杂sql时吃不消的,mysql本着越简单越好。
道玄希言 2015-11-01
  • 打赏
  • 举报
回复

SELECT DATEDIFF(t1.d_time, ifnull(t2.d_time, now())) 
(
SELECT T.* 
FROM
(
SELECT t1.*,
(SELECT COUNT(*)+1 FROM tbl01 WHERE cp_name=t1.cp_name AND d_time>t1.d_time) AS g_id
FROM adm_cplist t1
) T
WHERE T.g_id=1
) as t1
left join 
(
SELECT T.* 
FROM
(
SELECT t1.*,
(SELECT COUNT(*)+1 FROM tbl01 WHERE cp_name=t1.cp_name AND d_time>t1.d_time) AS g_id
FROM adm_cplist t1
) T
WHERE T.g_id=2
) as t2
on t1.cp_name = t2.cp_name

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧