我有一张有下列字段的桌子。
Table
+----+-------+---------+------------+
| id | title | approve | expirydate |
+----+-------+---------+------------+我想要按“呼气日期”过滤行,因为我希望先得到与今天相距很远的数据行(呼气日期字段的降序),如果任何一行没有“呼气日期”,或者它已经过期,则按id字段的降序排序。
示例(假设今天是== 2015-01-15)
+----+-------+---------+------------+
| id | title | approve | expirydate |
+----+-------+---------+------------+
| 1 | ttle1 | 1 | 2015-01-01 |
+----+-------+---------+------------+
| 2 | ttle2 | 1 | 2015-02-15 |
+----+-------+---------+------------+
| 3 | ttle3 | 1 | |
+----+-------+---------+------------+
| 4 | ttle4 | 1 | 2015-01-20 |
+----+-------+---------+------------+预期结果
+----+-------+---------+------------+
| 2 | ttle2 | 1 | 2015-02-15 |
+----+-------+---------+------------+
| 4 | ttle4 | 1 | 2015-01-20 |
+----+-------+---------+------------+
| 3 | ttle3 | 1 | |
+----+-------+---------+------------+
| 1 | ttle1 | 1 | 2015-01-01 |
+----+-------+---------+------------+是否可以在一个MySQL查询中获得这些条件下的值??我真的没有主意做this.Any帮助感激地收到:)
发布于 2015-01-15 16:07:11
select * from `table` order by
ifnull(expirydate>curdate(),0) desc,
if(expirydate>curdate(),expirydate,null) desc,
id descifnull(expirydate>curdate(),0) desc需要在过期前或在expirydate中放置null。ifnull需要将null in expirydate (expirydate>curdate()返回null)与已过期(expirydate>curdate()返回0)的处理方式相同。if(expirydate>curdate(),expirydate,null) desc需要通过提供相同的排序值(在本例中为null,但对于给定的数据类型可以是任何其他有效值),在不影响过期的情况下由expirydate按降序顺序订购,或者使用expirydate中的null进行排序。id desc顺序由id降序。影响已过期或在expirydate中使用expirydate,但在相同的expirydate中未过期。发布于 2015-01-15 15:55:27
我认为更多的数据将有助于理解结构,但是下面的查询会返回您想要的内容吗?
假设您的表名是tbl,那么:
SELECT *
FROM
tbl
order by - datediff(now(), coalesce(expirydate, now())) desc , id desc;发布于 2015-01-15 16:41:29
SELECT id, title, approve, expirydate FROM
(SELECT id, title, approve, expirydate
FROM tableName
WHERE expirydate > '2015-01-15'
ORDER BY expirydate DESC) AS t1
UNION
SELECT id, title, approve, expirydate FROM
(SELECT id,title, approve, expirydate
FROM tableName
WHERE expirydate < '2015-01-15' OR expirydate IS NULL
ORDER BY id DESC) AS t2https://stackoverflow.com/questions/27967239
复制相似问题