使用简单查询按列值计算重复寄存器

时间:2013-10-03 18:24:31

标签: mysql sql

鉴于我有下表:

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)

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

1 个答案:

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