我有一个主要由日期,ID和地址组成的数据集,看起来有点像这样:
datadate id address
20150801 Bob 123
20150801 Bob 123
20150801 Dan 345
20150801 Dan 456
20150801 Dan 567
20150801 George 234
20150801 Jim 123
20150801 Jim 123
20150801 John 678
20150801 John 123
20150802 Tom 123
20150802 Tom 234
20150802 Tom 345
我的目标是编写一个查询,用于标识与特定日期(或日期范围)的多个不同地址关联的任何ID。我希望查询结果为我提供名称和不同的地址。因此,对于这个数据集,我希望看到的结果看起来像这样,对于2015年8月1日:
datadate id address
20150801 Dan 345
20150801 Dan 456
20150801 Dan 567
20150801 John 678
20150801 John 123
我到目前为止所做的查询是这样的,但它并不适合我:
SELECT a.[datadate], a.[id], a.[address], b.[count1]
FROM table1 AS a INNER JOIN (SELECT [id], COUNT([address]) as [count1] FROM table1 GROUP BY [id] having count1 > 1 ) AS b ON a.[id]=b.[id]
WHERE a.[datadate] = '20150801'
ORDER BY a.[id], a.[address];
有什么建议吗?
答案 0 :(得分:1)
只需稍微修改您现有的查询,您就可以更改您的count(distinct address)
,然后加入表格以获取您的地址值:
SELECT t.datadate
,t.id
,t1.address
FROM (
SELECT datadate
,id
,count(DISTINCT address) address
FROM test
WHERE datadate = '20150801'
GROUP BY datadate,id
HAVING count(DISTINCT address) > 1
) t
INNER JOIN test t1 ON t.datadate = t1.datadate
AND t.id = t1.id;
我在SQL Server
上对此进行了测试,但在MS-Access
中也应该类似。
答案 1 :(得分:0)
修改强>
我刚刚再次阅读了您的问题,看起来您想要所有重复项。在这种情况下,我会使用exists
来查看是否存在具有相同ID但具有不同地址的另一行。
select * from mytable t1
where datadate = '20150801'
and exists (
select 1 from mytable t2
where t2.id = t1.id
and t2.address <> t1.address
and t2.datadate = t1.datadate
)