鉴于我有下表:
Id, Date, Data Identifier, Info
1, 2013-01-01, 'XSWQ', '#1'
2, 2013-01-02, 'ADWS', '#1'
3, 2013-01-02, 'ADWS', '#2'
4, 2013-01-02, 'QKVJ', '#1'
5, 2013-01-03, 'XSWQ', '#1'
6, 2013-01-03, 'ADWS', '#1'
7, 2013-01-04, 'QKVJ', '#1'
8, 2013-01-04, 'VSAQ', '#1'
9, 2013-01-04, 'VSAQ', '#2'
如何在一段有限的时间内使用唯一且简单的SQL(无子查询)计算重复寄存器(不同日期中的相同数据标识符),但比较所有时间的记录?
例如,我想计算考虑整个表格的2013-01-02和2013-01-04之间出现的重复记录。 'VSAQ'不应被视为重复,但'XSWQ'应被视为重复记录(首次出现在指定期间之外)。
然后结果是3(XSWQ,ADWS,QKVJ)
是否可以使用独特而简单的查询?
答案 0 :(得分:0)
SELECT DISTINCT tbl.Identifier
FROM tbl
LEFT JOIN tbl AS everything
ON tbl.Identifier = everything.Identifier
AND tbl.Id <> everything.Identifier
WHERE tbl.Date BETWEEN '2013-01-02' AND '2013-01-04'
AND everything.id IS NOT NULL
ORDER BY tbl.Identifier
但为什么反子查询呢?子查询可能更快 见http://sqlfiddle.com/#!2/19fb3/5