0

鉴于我有下表:

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)

是否可以使用独特而简单的查询?

4

1 回答 1

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

于 2013-10-03T18:36:31.857 回答