好的,我有一张这样的table
+----+-------+------------+
| id | title | date |
+----+-------+------------+
| 1 | aaa | 2018-08-13 |
| 2 | bbb | 2018-08-02 |
| 3 | ccc | 2018-07-06 |
| 4 | ddd | 2018-07-16 |
| 5 | fff | 2018-07-13 |
+----+-------+------------+
我想按日期列升序排序,但只在特定日期之前,然后按降序排序,如下所示
+----+-------+------------+
| id | title | date |
+----+-------+------------+
| 4 | ddd | 2018-07-16 |
| 2 | bbb | 2018-08-02 |
| 1 | aaa | 2018-08-13 |
| 5 | fff | 2018-07-13 |
| 3 | ccc | 2018-07-06 |
+----+-------+------------+
我想我可以 UNION
,但不是我不知道怎么用,就是不接受 ORDER BY
各条款中规定的条款 SELECT
.
编辑:我可能没有很好地解释自己。在我的查询中,我需要用它按日期升序排序特定日期之后的所有行(>=某个日期,在本例中使用2018-07-15)和降序排序之前的所有行。
5条答案
按热度按时间oo7oh9g91#
准确地知道你想要使用的日期,你可以这样做:
它相当大,但在本例中,我将基于每个子查询模拟行数,并将其连接起来以便以后排序。也就是说你可以在某个时候倒着点。
我喜欢这个的地方是,我们在rownum中根据在union之前订购的每个项目指定了顺序。
eaf3rand2#
使用子查询尝试此联合:
9wbgstp73#
关于d-shih奠定的基础。。。
http://sqlfiddle.com/#!9/58a8ac/20型
你可能真的不需要上面所有的技巧,但我只是在不断地编这些东西。。。
wecizke34#
你应该用一个
order by
没有子查询:zd287kbt5#
@d-shih差点就搞定了。。。
你可以通过工会来解决,但这很快就会变得一团糟。
您还可以将case语句实现为least()