2017-01-08 8 views
1

私の問題は、さまざまな日付の行が絶えず追加されているため、テーブル内の曲の最初のエントリが必ずしも最も早いオカレンスであるとは限りません。表をプレイこのクエリで、最も古い日付に関連付けられたレコードが正しく表示されないのはなぜですか?

song_name  played_id  show_id 
------------------------------------------- 
A Song   0001    000a 
Another Song  0002    000a 
A Song   0003    000b 

表を表示します

show_id   date 
------------------------------------------- 
000a    2/2/2012 
000b    1/1/2011 

望ましい結果:

song_name  played_id   date 
------------------------------------------- 
A Song   0003    1/1/2011 
Another Song  0002    2/2/2012 

現在のイライラ結果:

song_name   played_id  date 
------------------------------------------- 
A Song   0001    2/2/2012 
Another Song  0002    2/2/2012 
このクエリから来

:私は上記のクエリにLIMIT 1を追加すると

SELECT p.song_id, s.date AS date, p.song_name, p.show_id, p.set_order, p.played_id 
FROM played p 
INNER JOIN shows s 
ON p.show_id = s.show_id 
GROUP BY p.song_id 
ORDER BY s.date ASC 

私の結果は個別の曲の名前のリストを表示するのではなく1行しか表示されません。

ORDER BYがすべての日付を見る機会を得る前にGROUP BYがすべての曲の最初のオカレンスを選択しているので、私はSub Queryを使用する必要があると仮定していますが、わかりません。助けをあらかじめありがとう!

答えて

1

はこれを試してみてください:

SELECT 
    p.song_id, 
    s.date, 
    p.song_name, 
    p.show_id, 
    p.set_order, 
    p.played_id 
FROM 
    played p 
     INNER JOIN 
    shows s ON p.show_id = s.show_id 
     INNER JOIN 
    (SELECT 
     p.song_id, MIN(s.date) DATE 
    FROM 
     played p 
    INNER JOIN shows s ON p.show_id = s.show_id 
    GROUP BY p.song_id) x ON p.song_id = x.song_id 
     AND s.date = x.date; 

それは各song_idための最も早い日付を発見し、メインが必要な結果を見つけるために参加して、結果を結合します。

+0

完璧!ありがとうございました! – smalls0212

関連する問題