-1

2 つのテーブルがあり、そのうちの 1 つは毎日更新されます。各行の最新レコードのみを表示したいと考えています。

これは私が現在使用しているクエリで、もちろんすべてのレコードを返します。

SELECT * 
FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id 
ORDER BY id ASC

どんな助けでも大歓迎です!

4

3 に答える 3

3

サブクエリを使用して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
于 2013-02-04T14:18:26.677 に答える
1

このクエリを使用します:

SELECT * FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id ORDER BY id DESC LIMIT 1

これは、idが自動インクリメント列であり、常に順番に挿入されることを前提としています。

于 2013-02-04T14:16:16.227 に答える
-2

これが私が得たものです:

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 |
于 2013-02-04T14:44:49.307 に答える