我有一个有3列的桌子,
ID ---- Site ---- Date
1A ----- A ----10/12/16
1A ----- B ----11/12/16
2A ----- A ----10/12/16
3A ----- A ----09/12/16
3A ----- B ----09/12/16
4A ----- A ----11/12/16
5A ----- A ----11/12/16
5A ----- B ----11/12/16
6A ----- A ----09/12/16
6A ----- B ----10/12/16
Run Code Online (Sandbox Code Playgroud)
我需要所有具有主站点的行 -
我还需要具有相同ID和相同日期的行,站点可以是不同的.
如果行具有相同的ID但具有不同的日期,那么我需要将它们过滤掉.所以表应该看起来像 -
ID ---- Site ---- Date
1A ----- A ----10/12/16
2A ----- A ----10/12/16
3A ----- A ----09/12/16
3A ----- B ----09/12/16
4A ----- A ----11/12/16
5A ----- A ----11/12/16
5A ----- B ----11/12/16
6A ----- A ----09/12/16
Run Code Online (Sandbox Code Playgroud)
SELECT t1.*
FROM yourTable t1
LEFT JOIN
(
SELECT ID, Date
FROM yourTable
GROUP BY ID, Date
HAVING COUNT(*) > 1
) t2
ON t1.ID = t2.ID AND
t1.Date = t2.Date
WHERE t1.Site = 'A' OR
t2.ID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
说明:
子查询识别ID,Date对用于将多于一个的记录出现具有(忽略位点)这些值.连接标记您要保留的这些记录.在该WHERE子句中,重复记录或具有该'A'站点的记录将保留在结果集中.