2013-07-29 80 views
0

我有一個表像下面的MYSQL DISTINCT和ORDER BY一起

item_id position_number   position_date 
    1    9    2013-06-29 15:12:58 
    2    7    2013-07-25 15:12:58 
    18    5    2013-07-08 12:07:00 
    13    9    2013-07-08 12:07:00 

我想POSITION_NUMBER和秩序由position_date DESC得到項目組,所以查詢將返回以下:

item_id position_number   position_date 
    13    9    2013-07-08 12:07:00 
    2    7    2013-07-25 15:12:58 
    18    5    2013-07-08 12:07:00 

我一直在實現一些使用DISTINCT和GROUP BY的解決方案,但沒有得到想要的結果。

有沒有人有關於如何解決它的想法?

+0

查看我的編輯答案和http:// WWW。 sqlfiddle.com/#!2/b39b7/4 –

+0

你希望結果不按position_date排序,但現在查看我編輯的答案。 –

回答

2

試試這個

SELECT * FROM your_table組由POSITION_NUMBER爲了通過position_date DESC

編輯:

SELECT `item_id`, max(`position_number`) position_number , max(`position_date`) position_date FROM TABLENAME 
GROUP BY POSITION_NUMBER 
ORDER BY POSITION_DATE DESC 

DEMO

+0

我認爲,這不會在MySQL中工作。當您使用分組時,有關其他列的信息將丟失,並且數據的其中一列將被「隨機」選中。 –

3
SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT position_number, MAX(position_date) position_date 
      FROM tableName 
      GROUP BY position_number 
     ) b ON a.position_number = b.position_number AND 
       a.position_date = b.position_date 
ORDER BY a.position_number DESC 
+1

+1。這將返回指定的結果集。但是我們還注意到,對於其他數據,如果特定位置編號的相同「最大」位置_日期出現在多行上,則該位置編號將返回多行。 (示例數據不包括這種情況,所以目前還不清楚在這種情況下所需的輸出是什麼樣子。) – spencer7593

0

這裏是SQLFiddle

SELECT * FROM TABLE_NAME 
    GROUP BY POSITION_NUMBER 
    ORDER BY POSITION_DATE DESC 
+0

y投票嗎?這裏有什麼不對? –

+0

我沒有downvote,但我猜可能是因爲你的查詢沒有返回預期的結果。此外,這是非標準的SQL,即使有些SQL產品支持它,也有人可能不喜歡它。實際上,其原因可能不是非標準性,因爲這種查詢並不保證每次運行時都會得到相同的結果。 –

3

鑑於你的數據。例如,下面的查詢將返回指定的結果集:

SELECT t.item_id 
    , t.position_number 
    , t.position_date 
    FROM (SELECT MAX(n.item_id) AS max_item_id 
      FROM mytable n 
      GROUP BY position_number 
     ) m 
    JOIN mytable t 
    ON t.item_id = m.max_item_id 
    ORDER BY t.position_number DESC 

注意這是選擇單對於eac,爲item_id h位置編號。這假定給定的item_id只會出現一次,並且只有一個position_number。 (如果item_id可以與多個postion_number相關聯,則可以調整查詢,這是使用MAX()函數來選擇具有最大值的item_id(排除的唯一示例是item_id = 1。)

0

試試這個代碼:

SELECT * FROM TABLE_NAME GROUP BY POSITION_NUMBER ORDER BY POSITION_DATE DESC 
0

使用GROUP_BY,要麼最小或最大決定要用於排序哪個日期組中

SELECT * FROM my_table GROUP BY position_number ORDER BY MAX(position_date) DESC;