繁体   English   中英

如何先按新日期然后按通过日期排序?

[英]How sort by new date first then by passed date?

我在 mysql 数据库中有日期列。 我需要按日期对 ASC 进行排序,但首先显示尚未发生的日期,然后发生女巫。 那个sql语句怎么做? 结果示例:

for date 25 October 2015
new by ASC:
2015-10-25
2015-10-27
2015-11-03
...
then old by DESC:
2015-10-24
2015-10-14
2015-09-10
...

ps 我正在使用 Yii2 框架(但干净的 php 也会很好)。

鉴于此示例数据:

CREATE TABLE t
    (`date` date)
;

INSERT INTO t
    (`date`)
VALUES
    ('2015-10-25'),
    ('2015-10-27'),
    ('2015-11-03'),
    ('2015-10-24'),
    ('2015-10-14'),
    ('2015-09-10')
;

和这个查询:

SELECT
date
FROM
t
ORDER BY
date >= CURDATE() DESC
, ABS(DATEDIFF(date, CURDATE()));

你得到你想要的输出:

|                        date |
|-----------------------------|
|   October, 25 2015 00:00:00 |
|   October, 27 2015 00:00:00 |
|  November, 03 2015 00:00:00 |
|   October, 24 2015 00:00:00 |
|   October, 14 2015 00:00:00 |
| September, 10 2015 00:00:00 |

检查fancyPants 解决方案后,我傻了。

但我想展示我正在合作的那个

SqlFiddleDemo

  SELECT *
  FROM (
        SELECT t.*,
               (@rn := if(true, @rn + 1, 1)
               ) as rn
        FROM myTable t         
        CROSS JOIN
              (select @rn := 0) params
        WHERE dateField >= NOW()
        ORDER BY dateField asc
      ) X
  UNION 
  SELECT *
  FROM (
        SELECT t.*,
                 (@bn := if(true, @bn + 1, 1)
                 ) as rn
        FROM myTable t         
        CROSS JOIN
              (select @bn := (SELECT COUNT(*) 
                              FROM myTable 
                              WHERE dateField >= NOW()
                             ) a
              ) params
        WHERE dateField < NOW()
        ORDER BY dateField desc
      ) Y 

输出

|                   dateField | rn |
|-----------------------------|----|
|   October, 25 2015 00:00:00 |  1 |
|   October, 27 2015 00:00:00 |  2 |
|  November, 03 2015 00:00:00 |  3 |
|   October, 24 2015 00:00:00 |  4 |
|   October, 14 2015 00:00:00 |  5 |
| September, 10 2015 00:00:00 |  6 |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM