2

ソリューションに頭を悩ませることができないいくつかの SQL に問題があります。

現在、私が基本的に実行しているクエリは次のとおりです。

SELECT Q.ID, Q.STATUS, C.LASTNAME, C.FIRSTNAME, 
       C.POSTAL, C.PHONE 
FROM QUEUE Q 
LEFT OUTER JOIN CUSTOMER C ON Q.ID = C.APPID 
WHERE C.LASTNAME LIKE 'SMITH%'

このクエリから約 200 のレコードがあります。私の問題は、同じ人が複数回出現していることです。

Q.ID  Q.STATUS   C.LASTNAME   C.FIRSTNAME   ETC...
 1        A         SMITH        JOHN
 2        A         SMITH        RYAN
 3        B         SMITH        BRIAN
 100      A         SMITH        RYAN
 200      A         SMITH        RYAN

代わりに返す必要があるのは

Q.ID   Q.STATUS   C.LASTNAME   C.FIRSTNAME   ETC...
 1        A          SMITH         JOHN
 3        B          SMITH         BRIAN
 200      A          SMITH         RYAN

誰でも私を正しい方向に向けることができますか?私が試してみました

SELECT WHATEVER FROM TABLE WHERE Q.ID IN (SELECT MAX(ID) FROM TABLE WHERE BLAH BLAH) 

具体的には「RYAN SMITH」を検索するときに機能しました。しかし、ID が最も高い SMITH のすべての結果を表示する必要があります。

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

乾杯

4

4 に答える 4

2

私はあなたが以下のようなことをすることができると思います

SELECT WHATEVER FROM TABLE 
WHERE Q.ID IN 
    (SELECT MAX(ID) FROM TABLE 
     WHERE BLAH...BLAH 
     GROUP BY C.FIRSTNAME, C.LASTNAME)

お役に立てれば!!

于 2011-09-26T19:41:17.967 に答える
0

あなたはそのようなことを試みましたか?それは実際にはSQLステートメントではなく、アイデアを示しているだけです。

select * from Table where id in (
         select max(q.id) from Table group by c.lastname, c,firstname
)
于 2011-09-26T19:42:05.950 に答える
0

があると仮定すると、CUSTOMER.ID私は正しいと思います、ここに行きます:

SELECT Q.ID, Q.STATUS, M.LASTNAME, M.FIRSTNAME, 
       M.POSTAL, M.PHONE 
FROM QUEUE Q 
LEFT OUTER JOIN (
  SELECT C2.ID CID, 
         MAX(C2.FIRSTNAME) FIRSTNAME, 
         MAX(C2.LASTNAME) LASTNAME, 
         MAX(C2.POSTAL) POSTAL,
         MAX(C2.PHONE) PHONE,
         MAX(Q2.ID) QID
  FROM QUEUE Q2 
  LEFT OUTER JOIN CUSTOMER C2 ON Q2.ID = C.APPID 
  WHERE C2.LASTNAME LIKE 'SMITH%'
  GROUP BY C2.ID
) M ON (M.QID = Q.ID)
于 2011-09-26T19:43:54.907 に答える
0

私がよく理解していれば、これはうまくいくはずです:

SELECT Q.ID
     , Q.STATUS
     , C.LASTNAME
     , C.FIRSTNAME, 
     , C.POSTAL
     , C.PHONE
  FROM QUEUE Q 
  join CUSTOMER C ON Q.ID = C.APPID 
 WHERE C.LASTNAME like 'SMITH%'
   and not exists (SELECT *
                     FROM CUSTOMER innerCustomer
                    WHERE innerCustomer.LASTNAME like 'SMITH%'
                      and innerCustomer.APPID > C.APPID
                  )

注:C.LASTNAMEごとにフィルタリングしているため、「左結合」を「内部結合」に変更しました。したがって、左結合はあまり意味がないと思います。

于 2011-09-26T19:48:11.087 に答える