从mysql查询中选择第二长的时间

时间:2014-03-11 16:21:27

标签: mysql sql

我想通过下面的sql查询了解第二个最长的主题时间但是它导致了错误:

SELECT h.topic AS Help_Topic, MAX(TIMESTAMPDIFF( MINUTE , t.created, t.closed )) as SecondMax
FROM ost_ticket t, ost_help_topic h
WHERE t.topic_id = h.topic_id
AND t.status =  'Closed'
AND t.dept_id =  '1'
AND t.created >=  '2014-01-01 00:00:00'
AND TIMESTAMPDIFF( MINUTE , t.created, t.closed ) < SecondMax 
GROUP BY t.topic_id
ORDER BY Closed DESC");

我怀疑链接“AND TIMESTAMPDIFF(MINUTE,t.created,t.closed)&lt; SecondMax”是罪魁祸首,但我不确定。

数据库表:

h.topic |创建|关闭

小孩| 2014-01-01 00:05:00 | 2014-01-02 00:06:00

小孩| 2014-01-01 00:05:00 | 2014-01-02 00:07:00

小孩| 2014-01-01 00:05:00 | 2014-01-02 00:08:00

成人| 2014-01-01 00:05:00 | 2014-01-02 00:07:00

成人| 2014-01-01 00:05:00 | 2014-01-02 00:10:00

成人| 2014-01-01 00:05:00 | 2014-01-02 00:14:00

期望的结果是

Help_topic | SecondMax

小孩| 2

成人| 5

由于

1 个答案:

答案 0 :(得分:1)

你已经确定了罪魁祸首。您无法在SecondMax子句中引用列别名where

如果您希望第二长时间符合这些条件,我会采用group_concat()方法。您将字符串持续时间连接在一起,然后从中提取第二个:

SELECT h.topic AS Help_Topic,
       substring_index(substring_index(group_concat(TIMESTAMPDIFF(MINUTE, t.created, t.closed )
                                                    order by TIMESTAMPDIFF(MINUTE, t.created, t.closed) desc
                                                   ), ',', 2
                                       ), ',', -1
                      ) as SecondMax
FROM ost_ticket t join
     ost_help_topic h
     on t.topic_id = h.topic_id
WHERE t.status =  'Closed' AND t.dept_id =  '1' AND t.created >=  '2014-01-01 00:00:00'
GROUP BY t.topic_id;

我还更改了join以使用正确的join语法。