表1
ID fromdate todate
001 23/02/2012 27/02/2012
002 23/02/2012 27/02/2012
003 28/02/2012 09/09/2013
....
条件:我不想显示重复的值,所以从日期验证与其他日期相同,如果它相等则不应重复,到目前为止与其他日期验证,如果它等于那么日期不应该重复,
预期产出
ID fromdate todate
001 23/02/2012 27/02/2012
003 28/02/2012 09/09/2013
....
从上面的输出中,002没有显示,因为fromdate和todate与001相同,所以从最新的比较不应该重复。
如何为上述条件编写查询?
答案 0 :(得分:4)
试试这个:
SELECT MIN(ID), fromDate, toDate FROM table
GROUP BY fromDate, toDate
答案 1 :(得分:2)
ROW_NUMBER
解决方案更易于编写,但可以使用SQL Server 2000
。
简而言之
fromdates
todates
获得剩余最低fromdates
的子选择中的所有最低JOINING
。todates
获取剩余JOINING
的实际表中的所有记录。SQL声明
SELECT Table1.*
FROM Table1
INNER JOIN (
SELECT ID = MIN(Table1.ID), todate
FROM Table1
INNER JOIN (
SELECT ID = MIN(ID), fromdate
FROM Table1
GROUP BY
fromdate
) UniqueFromDates ON UniqueFromDates.ID = Table1.ID
GROUP BY
todate
) UniqueToDates ON UniqueToDates.ID = Table1.ID
答案 2 :(得分:1)
如果您要求“来自和迄今为止比较不应重复”是您的要求,那么非常简单
如果有多个“ID”具有相同的fromdata和todate且您想显示第一个ID ,请使用此
select MIN(id) id,fromdata, todate from tablename group by fromdata, todate
如果有多个“ID”具有相同的fromdata和todate,并且您希望显示最后ID ,请使用此
select MAX(id) id,fromdata, todate from tablename group by fromdata, todate
答案 3 :(得分:0)
您也可以使用PARTITION BY
之类的↓
SELECT id,
fromdate,
todate
FROM (SELECT id,
fromdate,
todate,
Row_number() OVER (PARTITION BY fromdate, todate ORDER BY id) AS
row
FROM table) t
WHERE t.row = 1