SQL,如何获取第二次发生事件的年份

时间:2013-02-19 03:56:13

标签: sql-server tsql

如果我们有这样的数据:

Element Year
--------------
Elem1   2012
Elem1   2013
Elem1   2015
Elem2   2012
Elem2   2013
Elem3   2012

当元素出现时,元素失败,如何使用T-SQL获取每个失败元素的失败年份?

Elem1 2013
Elem2 2013

编辑以斜体添加文字

2 个答案:

答案 0 :(得分:1)

我对这个问题的理解是,对于任何给定的元素,你想要返回第二个最低日期的行。这个例子有点含糊不清,因为这两个案例的日期都是2013年。如果我理解正确的话,应该这样做:

select * from table_name as t where 
    (select count(*) from table_name where element = t.element and year < t.year) = 1

IE:选择具有相同元素和较低年份的行数恰好为1的每一行。

很可能是一种更有效的方式,但这应该有效。 (没有tsql方便,但在mysql中使用您的示例表进行了测试。)

答案 1 :(得分:0)

在这里。

SELECT *
FROM test
WHERE year IN(
              SELECT year
              FROM test
              GROUP BY year
              HAVING COUNT(1) = 2 )

Sql Fiddle