0

MySQL データベースに 2 つのテーブルがあります

(id, name) テーブル 1 は、フィールドレコードを持つ table1 と言う。

###############
id |  name
1  |  Chair
2  |  Table
3  |  Bed
###############

および表2は、フィールドを持つtable2と言います(id, table1_id, date, price)

##############################
id |table1_id| date     |  price
1  |  1  |  2013-09-09  |  500
2  |  1  |  2013-08-09  |  300
3  |  2  |  2013-09-09  |  5100
4  |  2  |  2013-08-09  |  5000
5  |  3  |  2013-09-09  |  10500
################################

私が達成したいのは、テーブル2からアイテムの最新の価格をすべて取得することです

SQLの結果は次のようになります

##############################
id |table1_id| date     |  price
1  |  1  |  2013-09-09  |  500
3  |  2  |  2013-09-09  |  5100
5  |  3  |  2013-09-09  |  10500
################################

クエリで並べ替えることができます

SELECT * FROM table2 GROUP BY table1_id ORDER BY date DESC

しかし、GROUP BY は ORDER BY 句の前に実行されるように見えるため、結果は必要とされません 事前に感謝します

4

2 に答える 2

3

ONサブクエリを使用して句内の結合エントリを制限できるため、最新のエントリのみが結合されます。

SELECT t2.id, t1.id, t1.name, t2.date, t2.price 
  FROM table1 t1 JOIN table2 t2 
    ON (t1.id = t2.table1_id 
      AND t2.id = (
        SELECT id 
        FROM table2 
        WHERE table1_id = t1.id 
        ORDER BY table2.date DESC 
        LIMIT 1
    ));

結果:

|1|1|Chair|2013-09-09|  500|
----------------------------
|3|2|Table|2013-09-09| 5100|
----------------------------
|5|3|  Bed|2013-09-09|10500|
于 2013-09-30T09:01:29.697 に答える
1

次のようにサブクエリを使用できます。

SELECT 
  table2.id,
  dates_table.max_date,
  dates_table.table1_id,
  table2.price
FROM
  (SELECT 
    MAX(`date`) AS max_date, 
    table1_id
  FROM
    table2
  GROUP BY
    table1_id) AS dates_table
  LEFT JOIN
    table2 ON dates_table.`max_date`=table2.`date`
于 2013-09-30T08:54:19.067 に答える