2 つのテーブルがあり、そのうちの 1 つは毎日更新されます。各行の最新レコードのみを表示したいと考えています。
これは私が現在使用しているクエリで、もちろんすべてのレコードを返します。
SELECT *
FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id
ORDER BY id ASC
どんな助けでも大歓迎です!
2 つのテーブルがあり、そのうちの 1 つは毎日更新されます。各行の最新レコードのみを表示したいと考えています。
これは私が現在使用しているクエリで、もちろんすべてのレコードを返します。
SELECT *
FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id
ORDER BY id ASC
どんな助けでも大歓迎です!
サブクエリを使用してsegment_id
、すべての最新のレコードを見つけることができます。ID
サブクエリの結果は、2つのテーブルとに対して結合ss_pumps
されsecondary_systems
ます。
SELECT a.*, c.*
FROM ss_pumps a
INNER JOIN
(
SELECT segment_id, MAX(datefield) max_val
FROM secondary_systems
GROUP BY segment_id
)b ON a.id = b.segment_id
INNER JOIN secondary_systems c
ON b.segment_id = c.segment_id AND
b.max_val = c.datefield
実際、私はあなたのテーブルがどのように関係しているかわかりません:ss_pumps
そしてsecondary_systems
互いに関連しています。
私はあなたがそれを他の方法で望んでいると思います、
SELECT a.*, b.*
FROM secondary_systems a
INNER JOIN ss_pumps b
ON a.segment_ID = b.segment
INNER JOIN
(
SELECT segment, MAX(ID) max_val
FROM ss_pumps
GROUP BY segment
) c ON b.segment = c.segment AND
b.ID = c.max_val
このクエリを使用します:
SELECT * FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id ORDER BY id DESC LIMIT 1
これは、idが自動インクリメント列であり、常に順番に挿入されることを前提としています。
これが私が得たものです:
SELECT *
FROM
ss_pumps ssp
LEFT JOIN ( SELECT * FROM secondary_systems ORDER BY id DESC ) ss ON ( ssp.id = ss.segment_id )
GROUP BY
ssp.id
ORDER BY
ssp.id ASC
警告:には、自動インクリメント
secondary_systems
する独自のid
フィールドがあると思います。これが、各行の最新のレコードのみを取得していることを確認できる唯一の方法です。
デモ: http ://sqlfiddle.com/#!2 / f816b / 2/0
私のデモでは、子供ss_pumps
を抱きしめている間、両親をsecondary_systems
抱きました。各親には3人の子供がいます。最後の子供を除いてすべて男の子です。最後の子供はいつも女の子です。あなたの問題によると、結果のクエリは女の子だけを生成するはずです。
| ID | PARENT | SEGMENT_ID | CHILD |
------------------------------------
| 1 | mother | 1 | betty |
| 2 | father | 2 | tina |