2017-06-13 10 views
1

は私のデータベース・テーブル次の結果としてdate_time <= NOW()max(date_time) DESCによってleft_table注文のレコードを取得するSQLクエリを作成する方法左テーブルを選択する方法、右テーブルの最大日付順、最大日付順はNOW()以下ですか?以下

left_table 
id name 
1  A 
2  B 
3  C 
4  D 
5  E 

right_table 
id left_table_id  size  date_time 
1  1     xs  2017-06-13 14:20:00 
2  3     s   2017-06-13 14:25:00 
3  2     xs  2017-06-13 14:27:00 
4  1     s   2017-06-13 14:30:00 
5  2     m   2017-06-13 14:32:00 
6  2     xs  2017-06-13 14:33:00 
7  3     xl  2017-06-13 14:40:00 
8  4     s   2017-06-13 14:41:00 
9  4     m   2017-06-13 14:45:00 
10 5     m   2017-06-13 14:46:00 

です。

result left_table order by max(add_time) DESC 
id name max(add_time) 
2  B  2017-06-13 14:33:00 
1  A  2017-06-13 14:30:00 
3  C  2017-06-13 14:25:00 

4及び5のleft_table_idのdate_timeがNOW>であるからです()。仮定するとNOW() = 2017-06-13 14::35:00。 left_table_id 3にはadd_time > NOW()が1つありますが、他の正しいレコードであるadd_time <= NOW()があるため、まだ選択されています。

答えて

2

次のようなクエリを使用することができます。

SELECT t.id, t.name, r.date_time 
FROM left_table AS t 
JOIN (
    SELECT id, MAX(date_time) AS date_time 
    FROM right_table 
    WHERE date_time <= NOW() 
    GROUP BY id) AS r ON t.id = r.id 
ORDER BY r.date_time DESC; 

クエリは、現在のタイムスタンプを過ぎているdate_time値を持つレコードをフィルタリングする派生テーブルを使用しています。また、最新のdate_time値をidにするために、レコードをグループ化します。この派生テーブルを使用して、date_timeフィールドを使用して必要な並べ替えを簡単に実行できます。

関連する問題