-2

私は2つのテーブルを持っています

   NAME
   +----+---------+
   | id |   name  |
   +----+---------+
   |  1 |   ABC   |
   |  2 |   CCC   |
   +----+---------+

   TBL_STATUS
   +----+-----------+--------+
   | id |  name_id  | status |
   +----+-----------+--------+
   |  1 |     1     |   KU   |
   |  2 |     1     |   HP   |
   |  3 |     1     |   HK   |
   |  4 |     2     |   KU   |
   |  5 |     2     |   HP   |
   +----+-----------+--------+

この2つのテーブルを選択して結合します(INNER JOIN)。これは私のクエリの結果です。

   +---------+--------+
   |   name  | status |
   +---------+--------+
   |   ABC   |   HK   |
   |   ABC   |   HP   |
   |   ABC   |   KU   |
   |   CCC   |   HP   |
   |   CCC   |   KU   |
   +---------+--------+

それぞれの名前には3つのステータスがあります。HK、HP、またはKU。最新のステータスの名前ごとに1行だけが必要です。例えば:

   +---------+--------+
   |   name  | status |
   +---------+--------+
   |   ABC   |   HK   |
   |   CCC   |   HP   |
   +---------+--------+

ステータスの優先度は、最初にHKで表示され(存在する場合)、HKが表示されない場合はHPで表示されます。

4

2 に答える 2

1

あなたは正しい軌道に乗っており、

   +----+---------+--------+
   | id |   name  | status |
   +----+---------+--------+
   |  1 |   ABC   |   HK   | -- Need to remove
   |  2 |   ABC   |   HP   | -- Need to remove
   |  3 |   ABC   |   KU   |
   |  5 |   CCC   |   HP   | -- Need to remove
   |  6 |   CCC   |   KU   | 
   +----+---------+--------+

これを各名前の最大IDに制限する必要があります。これは、以下INNER JOINで集計クエリを使用して実現されます。

SELECT  Name, Status
FROM    Name
        INNER JOIN tbl_Status
            ON tbl_Status.Name_ID = Name.ID
        INNER JOIN
        (   SELECT  MAX(ID) AS MaxStatusID
            FROM    Tbl_Status
            GROUP BY Name_ID
        ) MaxStatus
            ON MaxStatusID = tbl_Status.ID
于 2012-05-17T08:38:14.213 に答える
0

からmax(id)を見つけてTBL_STATUS、すべてのデータを接続する必要があります。例:

SELECT n.name, st3.status 
FROM name AS n 
LEFT JOIN 
  (SELECT st1.name_id, MAX(st1.id) AS max_id
     FROM TBL_STATUS st1 
     GROUP BY name_id) AS st2
  ON n.id=st2.name_id
LEFT JOIN 
  TBL_STATUS st3
  ON st2.max_id = st3.id 
于 2012-05-17T08:24:59.287 に答える