SQL查询,首先显示最新值,然后显示其他ASC
我有一个包含新闻的表格,然后使用foreach循环将其回送到滑块中。 我需要调整查询的排序顺序,因此最后添加的一个(max id)总是显示在第一位,其他的按id ASC排序 例如:新闻1,2,3,4。我需要它们像4,1,2,3那样回响SQL查询,首先显示最新值,然后显示其他ASC,sql,sorting,Sql,Sorting,我有一个包含新闻的表格,然后使用foreach循环将其回送到滑块中。 我需要调整查询的排序顺序,因此最后添加的一个(max id)总是显示在第一位,其他的按id ASC排序 例如:新闻1,2,3,4。我需要它们像4,1,2,3那样回响 SELECT * FROM news ORDER BY sort ASC 如何先以max(id)的形式添加另一个条件,然后再对ASC进行排序 谢谢。您可以尝试以下查询: SELECT * FROM ( SELECT *, (SELECT
SELECT * FROM news ORDER BY sort ASC
如何先以max(id)的形式添加另一个条件,然后再对ASC进行排序
谢谢。您可以尝试以下查询:
SELECT *
FROM (
SELECT *,
(SELECT MAX(Id) FROM news) AS max_id
FROM news) AS t
ORDER BY CASE WHEN id = max_id THEN 0 ELSE 1 END asc,
id ASC
或者,使用交叉连接
:
SELECT n.*
FROM news AS n
CROSS JOIN (SELECT MAX(Id) AS max_id FROM news) AS m
ORDER BY CASE WHEN n.id = m.max_id THEN 0 ELSE 1 END asc,
n.id ASC
您可以尝试以下查询:
SELECT *
FROM (
SELECT *,
(SELECT MAX(Id) FROM news) AS max_id
FROM news) AS t
ORDER BY CASE WHEN id = max_id THEN 0 ELSE 1 END asc,
id ASC
或者,使用交叉连接
:
SELECT n.*
FROM news AS n
CROSS JOIN (SELECT MAX(Id) AS max_id FROM news) AS m
ORDER BY CASE WHEN n.id = m.max_id THEN 0 ELSE 1 END asc,
n.id ASC
或者使用窗口功能
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id DESC) AS RN
FROM news) AS T
ORDER BY CASE WHEN RN = 1 THEN 0 ELSE 1 END, id
SELECT *
FROM (
SELECT *, MAX(id) OVER () AS MaxID
FROM news) AS T
ORDER BY CASE WHEN MaxID = id THEN 0 ELSE 1 END, id
或者使用窗口功能
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id DESC) AS RN
FROM news) AS T
ORDER BY CASE WHEN RN = 1 THEN 0 ELSE 1 END, id
SELECT *
FROM (
SELECT *, MAX(id) OVER () AS MaxID
FROM news) AS T
ORDER BY CASE WHEN MaxID = id THEN 0 ELSE 1 END, id
您使用的是哪种数据库管理系统?(您已经得到了产品特定的答案,不要浪费其他人的时间为“错误”的数据库编写答案。)您使用的是哪种dbms?(你已经得到了特定于产品的答案,不要浪费其他人的时间为“错误”的数据库写答案。)感谢所有建议,交叉连接方法有效。感谢所有建议,交叉连接方法有效。