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 回答