我想獲得不同的類別和訂單由curdate列的結果。與訂單的區別與條款
select distinct(Category)'Category' from sizes order by curdate desc
但是,這個簡單的查詢會產生錯誤。
如果指定了SELECT DISTINCT,則ORDER BY項目必須出現在選擇列表中。
我想獲得不同的類別和訂單由curdate列的結果。與訂單的區別與條款
select distinct(Category)'Category' from sizes order by curdate desc
但是,這個簡單的查詢會產生錯誤。
如果指定了SELECT DISTINCT,則ORDER BY項目必須出現在選擇列表中。
我怕你有同樣的約束對SELECT DISTINCT
爲GROUP BY
條款:即,你不能使用的字段這不是在字段列表中聲明的,因爲它只是不知道在排序時使用哪一個curdate
,以防在同一Category
中存在多個具有不同curdate
值的行。
編輯:你可以試試:
SELECT Category FROM sizes GROUP BY Category ORDER BY MAX(curdate) DESC
與MIN更換MAX或任何適合你。編輯2:在這種情況下,MAX(curdate)甚至不必在字段列表中出現,因爲它用於聚合函數。
CURDATE必須在SELECT語句還,現在你只指定類別
作爲錯誤消息說,你不能通過未選擇wehen的列使用SELECT DISTINCT
(與GROUP BY
相同的問題...)。改變你的查詢到這一點:
SELECT DISTINCT category, curdate FROM sizes ORDER BY curdate DESC
編輯:回覆yourt評論:
,如果你要選擇與每個類別的最後日期的不同類別,你必須改變你的查詢了一下。我可以想到兩種可能性:使用MAX()(如發佈Costi Ciudatu)或使用子選擇做一些瘋狂的事情 - 第一種方法是更好的方法。
如果我添加CURDATE在seelct條款不會返回不同的類別 – 2011-04-05 12:46:57
返回,如預期,Category'和'的不同組合'CURDATE ' – oezi 2011-04-05 12:48:52
你看起來是所有類別的列表後,與每個類別的日期。無論你是想最早的第一或最新首先,你應該能夠執行下列操作之一:
SELECT Category, MAX(curdate) FROM sizes GROUP BY Category
或者:
SELECT Category, MIN(curdate) FROM sizes GROUP BY Category
根據您是否要在最近或最早的日期相關聯每個類別。如果您需要在列表中,然後通過日期是ORDER
版,添加以下到結束的一個:
ORDER BY MAX(curdate)
ORDER BY MIN(curdate)
完全錯誤說什麼,它不能,如果提交的排序是沒有的一部分訂購不同的列表選擇。原因在於對於所選的每個不同值可能有多個排序值。如果數據看起來像這樣
Category CurDate
AAA 1/1/2011
BBB 2/1/2011
AAA 3/1/2011
AA應該在不同列表中的BBB之前還是之後?如果你只是在沒有明顯的日期的情況下訂購,你可以在兩個位置獲得。由於SQL不知道哪個日期應該與不同的類別相關聯,因此它不會讓您按日期排序。
with cte as
(
select
Category,
[CurDate],
row_number() over(partition by Category order by [CurDate]) as rn
from sizes
)
select
Category
from cte
where rn = 1
order by [CurDate]
如果我加入seelct條款CURDATE它不會返回不同的類別 – 2011-04-05 12:45:06