[英]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 解决方案后,我傻了。
但我想展示我正在合作的那个
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.