2011-03-31 123 views
1

我正在查詢名爲artists的表,但我想根據名爲paintings(藝術家has_many繪畫 - 繪畫表具有artist_id列)的表對響應進行排序。按另一個表中的值對sql查詢進行排序

更具體地說,我想根據他們最近的繪畫(繪畫有一列名爲date_created)對藝術家進行排序。有誰知道如何做到這一點?

回答

3

理想情況下這應該使用ANSI進行連接:

SELECT DISTINCT a.artist 
FROM   artists a 
    INNER JOIN paintings p 
    ON   a.artistID = p.artistID 
ORDER BY  p.date_created desc 
2

也許像這樣,取決於您的架構的具體情況?

SELECT DISTINCT artists.* FROM 
artists, paintings 
WHERE artists.id = paintings.artist_id 
ORDER BY paintings.painting_date DESC; 

這將連接藝術家id上的兩個表格,然後按他們的繪畫日期排序。 DISTINCT確保您只爲每位藝術家獲得一行。

+0

我認爲你需要添加DESC BY子句訂購,因爲要求是顯示最近的第一個..但它幾乎微不足道。 – Manoj 2011-03-31 15:18:30

+0

哈,我正在修正,因爲你提到它。雖然謝謝! – 2011-03-31 15:22:13

0

如果我理解正確的話你的要求:

1)寫一個聚集查詢,返回每個藝術家和他/她的最新塗裝的; 2)使用它作爲子查詢,將其加入到藝術家表中; 3)從連接中選擇列,按照最新的繪畫日期排序。

1

這隻會返回每個藝術家一次,與該藝術家的最新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 
0

您可以創建一個查詢:

  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 
相關問題