2013-07-04 83 views
0

這裏是我的查詢:如何扭轉這種來自SQL查詢表中已經包含了ORDER BY

SELECT TOP 8 id, rssi1, date 
FROM history 
WHERE (siteName = 'CCL03412') 
ORDER BY id DESC 

這個結果:

enter image description here

我怎樣才能扭轉這種基於表格在日期(Column2)通過使用SQL?

+0

怎麼樣:'SELECT TOP 8號,RSSI1,日期 歷史 WHERE(網站名稱= 'CCL03412') ORDER BY日期DESC' –

+1

@MehdiKaramosly:他不想要的前8按日期排序desc,他希望排名前8的id desc和這些前8應該由Column2排序。 –

+0

@MehdiKaramosly,它給同桌 – Ned

回答

1

可以使用第一查詢來獲取匹配ID,並把它們作爲一個IN條款的一部分:

SELECT id, rssi1, date 
FROM history 
WHERE id IN 
(
    SELECT TOP 8 id 
    FROM history 
    WHERE (siteName = 'CCL03412') 
    ORDER BY id DESC 
) 
ORDER BY date ASC 
0

我沒有運行這個,但我認爲它會工作。執行,讓我知道,如果你面對錯誤

選擇ID,RSSI1,從日期(SELECT TOP 8號,RSSI1,日期 歷史 WHERE(網站名稱= 'CCL03412') ORDER BY ID DESC)按日期;

+0

Msg 156,Level 15,State 1,Line 1. 關鍵字'ORDER'附近的語法不正確。 – Ned

1

不運行它,但我認爲它應該順利

WITH cte AS 
(
    SELECT id, rssi1, date, RANK() OVER (ORDER BY ID DESC) AS Rank 
    FROM history 
    WHERE (siteName = 'CCL03412') 
) 
SELECT id, rssi1, date 
FROM cte 
WHERE Rank <= 8 
ORDER BY Date DESC 
+0

它工作,如果我將DESC更改爲ASC。謝謝 – Ned

1

嘗試以下:

select * from (SELECT TOP 8 id, rssi1, date 
FROM history 
WHERE (siteName = 'CCL03412') 
ORDER BY id DESC) aa order by aa.date DESC 
+0

它也可以。謝謝 – Ned

2

你可以簡單地使用子查詢。如果應用TOP條款嵌套ORDER BY被允許:

SELECT X.* FROM(
    SELECT TOP 8 id, Column1, Column2 
    FROM dbo.History 
    WHERE (siteName = 'CCL03412') 
    ORDER BY id DESC) X 
ORDER BY Column2 

Demo

子查詢的SELECT查詢總是用括號括起來。它 不能包含COMPUTE或FOR BROWSE子句,並且可能只包含一個 ORDER BY子句,同時還指定了TOP子句

Subquery Fundamentals

+0

它的工作原理。謝謝 – Ned