结果mysql的力才能找到匹配IN子句的顺序(mysql force order of result

2019-10-30 02:34发布

这个问题是一个不同的常见问题有关IN子句排序的最终结果。

我想通过强制包含IN子句的查询返回的结果,以匹配IN子句的顺序。

这是原来的问题 ,我从工作。

我想,使得包含一列,以改变下面的查询progress=2之前发生progress=4progress=7每个session_id订购时formation_page_hits由表datetime

这是当前的查询:

SELECT  COUNT(*)
FROM    (
    SELECT  session_id
    FROM    formation_page_hits
    WHERE   progress IN (2, 4, 7)
            AND datetime >= '2011-03-23'
            AND datetime < '2011-03-24'
    GROUP BY
            session_id
    HAVING  COUNT(DISTINCT progress) = 3
    ) q

这些条目

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      2)
('2011-03-01 01:02:12', 'abc',      4)
('2011-03-01 01:02:13', 'abc',      7)

应该是用于查询的比赛,但是:

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      4)
('2011-03-01 01:02:12', 'abc',      2)
('2011-03-01 01:02:13', 'abc',      7)

不应该匹配。

另外:

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      4)
('2011-03-01 01:02:12', 'abc',      2)
('2011-03-01 01:02:13', 'abc',      4)
('2011-03-01 01:02:14', 'abc',      7)

应该是一个匹配。

Answer 1:

更常用的方法是双击自联接,结束了三路连接ON上升日期时间。 然而,这是很难表现良好的查询。

select *
from
(
    SELECT  session_id, group_concat(concat('|',progress,'/') order by datetime) list
    FROM    formation_page_hits
    WHERE   progress IN (2, 4, 7)
            AND datetime >= '2011-03-23'
            AND datetime < '2011-03-24'
    GROUP BY session_id
    HAVING  COUNT(DISTINCT progress) = 3
) X
where list like '%|2/%|4/%|7/%'


文章来源: mysql force order of results found to match order of IN clause