我正在查詢名爲artists的表,但我想根據名爲paintings(藝術家has_many繪畫 - 繪畫表具有artist_id列)的表對響應進行排序。按另一個表中的值對sql查詢進行排序
更具體地說,我想根據他們最近的繪畫(繪畫有一列名爲date_created)對藝術家進行排序。有誰知道如何做到這一點?
我正在查詢名爲artists的表,但我想根據名爲paintings(藝術家has_many繪畫 - 繪畫表具有artist_id列)的表對響應進行排序。按另一個表中的值對sql查詢進行排序
更具體地說,我想根據他們最近的繪畫(繪畫有一列名爲date_created)對藝術家進行排序。有誰知道如何做到這一點?
理想情況下這應該使用ANSI進行連接:
SELECT DISTINCT a.artist
FROM artists a
INNER JOIN paintings p
ON a.artistID = p.artistID
ORDER BY p.date_created desc
也許像這樣,取決於您的架構的具體情況?
SELECT DISTINCT artists.* FROM
artists, paintings
WHERE artists.id = paintings.artist_id
ORDER BY paintings.painting_date DESC;
這將連接藝術家id上的兩個表格,然後按他們的繪畫日期排序。 DISTINCT確保您只爲每位藝術家獲得一行。
如果我理解正確的話你的要求:
1)寫一個聚集查詢,返回每個藝術家和他/她的最新塗裝的; 2)使用它作爲子查詢,將其加入到藝術家表中; 3)從連接中選擇列,按照最新的繪畫日期排序。
這隻會返回每個藝術家一次,與該藝術家的最新date_created
值。
SELECT artists.name, paintings.date_created
FROM artists JOIN (
SELECT artist_id, MAX(date_created) as date_created FROM paintings GROUP BY artist_id
) paintings ON artists.id = paintings.artist_id
ORDER BY paintings.date_created DESC
您可以創建一個查詢:
select artistid, max(paintingdate)
from paintings
group by artistid
,然後加入到爲內嵌視圖:
select artistname from artist
inner join
(
select artistid, max(paintingdate) as latestdate
from paintings
group by artistid
) as Foo
on artist.artistid = Foo.artistid
order by latestdate desc
我認爲你需要添加DESC BY子句訂購,因爲要求是顯示最近的第一個..但它幾乎微不足道。 – Manoj 2011-03-31 15:18:30
哈,我正在修正,因爲你提到它。雖然謝謝! – 2011-03-31 15:22:13