3

prime_ministersだから私は、彼らが何yearを提供し、何をしていたかをすべてリストした表を持っていますparty.

3 ビットの情報が必要です。彼らのname、彼らの最初yearのオフィスとオフィスpartyの最後の年(一部は政党が入れ替わった)。

表はこんな感じです

min_nr|pm_name      |party           |yr_comm  
---------------------------------------------- 
1      Barton E      Protectionist    1901  
.  
.  
.  
11     Hughes W M    Labour           1915  
12     Hughes W M    National Labour  1916  
13     Hughes W M    Nationalists     1917  
14     Hughes W M    Nationalists     1918  
.  
.  

たくさんの検索を行いましたが、これを入力して結果を得る方法がわかりません。

Mr Woo はコメント セクションでそれを行いました。複数のJOINSとONでのANDの正しい使用法を理解していないことがわかりました。

SELECT a.pm_name, a.party, c.minYear
FROM  Table1 a 
      INNER JOIN
      (
          SELECT pm_name, MAX(yr_comm) maxYear
          FROM table1
          GROUP BY pm_name
      ) b ON a.pm_name = b.pm_name AND
             a.yr_comm = b.maxYear
      INNER JOIN
      (
        SELECT pm_name, MIN(yr_comm) minYear
        FROM table1
        GROUP BY  pm_name
      ) c ON a.pm_name = c.Pm_name

編集、多くの編集

4

1 に答える 1

4

サブクエリを試して、各首相の最大年を取得してください。これは、すべての列を取得する場合に機能します。

SELECT a.*
FROM tableName a INNER JOIN
        (
            SELECT ID, MAX(`year`) maxYear
            FROM tableName
            GROUP BY ID
        ) b ON a.ID = b.ID AND
                a.`Year` = b.maxYear

tableName=>テーブルの名前に
ID変更します=>主キーに
Year変更します=>年の列名に変更します。

しかし、あなたがID首相の年号を取得したいだけで、最終年は何年ですか. サブクエリなしで直接実行できます。

SELECT ID, MAX(`year`) finalYear
FROM tableName
GROUP BY ID

PS: この回答がまだ明確でない場合は、テーブルのスキーマ、サンプル レコード、および目的の結果を追加してください。ありがとう。

更新 1

SELECT a.pm_name, a.party, c.minYear
FROM  Table1 a 
      INNER JOIN
      (
          SELECT pm_name, MAX(yr_comm) maxYear
          FROM table1
          GROUP BY pm_name
      ) b ON a.pm_name = b.pm_name AND
             a.yr_comm = b.maxYear
      INNER JOIN
      (
        SELECT pm_name, MIN(yr_comm) minYear
        FROM table1
        GROUP BY  pm_name
      ) c ON a.pm_name = c.Pm_name

SQLFiddle デモ

于 2012-09-24T02:23:35.677 に答える