2016-12-10 9 views
2

私はnow()よりも高い日付を持つテーブルを取得しました。私はnow()日付よりも対応する行の最大値を下げたい。私はまず、今までに日付を取得してから、最大値を取得しようとしました。私が唯一の正しい最大の日付を取得していますが、対応する行が間違っているsqlは今まで最大日付を選択します

select sub.*,MAX(sub.DATE) 
From (
    SELECT s.id_series,s.name,e.title,e.DATE 
    FROM episodes e 
    JOIN series s ON s.id_series=e.id_series 
    WHERE e.DATE < now() 
) as sub 
JOIN episodes ep on sub.id_series=ep.id_series 
GROUP BY sub.name; 

:自分で

は、私が思い付きます。どんな助け?

答えて

1

あなたは残りの値があまりにもそれがexistsを使用するのが最も簡単ですしたい場合は、次の

SELECT s.id_series,s.name,e.title,e.DATE 
FROM episodes e 
JOIN series s ON s.id_series=e.id_series 
WHERE e.DATE < now() AND NOT EXISTS (
    SELECT * 
    FROM episodes e2 
    WHERE e2.id_series = e.id_series AND e2.DATE > e.DATE AND e2.DATE < now() 
) 

現在選択されているものよりも大きく、今よりも小さな値なしが(存在しない場合)、それが最大値であり、今までに()。

+0

ありがとう、それは動作します。なぜmax()関数を使いませんでしたか? – Mike

+1

maxは集計関数なので、正しく使用するにはgroup byを使用する必要があります。しかし、id_series(またはname)でグループ化すると、id_seriesとmax(e.date)の値だけが選択されます。列を追加することはできますが、それぞれに集計関数を配置する必要がありますが、左側と同じ行をとることはありません。ほとんどの方言では、集計なしで列を追加することはできませんが、MySQLでは可能ですが、任意の行を選択するだけです。グループ化して最大値を見つけ出し、元のテーブルに再結合して残りの列を取得することは可能です。 – maraca

+0

ありがとうございました – Mike

関連する問題