我想通过下面的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
由于
答案 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
语法。