如何避免重复值
表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是不是showi因为fromdate和todate与001是一样的,所以从现在开始到现在的比较都不应该重复。
如何为上述条件编写查询?
一个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
试试这个:
SELECT MIN(ID), fromDate, toDate FROM table
GROUP BY fromDate, toDate
如果你遗漏MIN,会发生什么? – 2012-02-27 08:45:02
身份证会有所不同,所以我不能使min(id)... – JetJack 2012-02-27 08:49:09
@MicSim:这将适用于测试数据,但不符合OP的要求。如果两个日期中的一个**不是唯一的,则不应重复。将“27/02/2012”中的一个更改为“2012年2月26日”,您将获得三条记录,而不是所需的两条记录。 – 2012-02-27 09:01:05
如果“从和日期比较不应重复”是你的要求,它非常简单
如果有多个“ID” s的同fromdata和todate和要显示第一个ID然后用这个
select MIN(id) id,fromdata, todate from tablename group by fromdata, todate
如果有多个“ID” s的SA我fromdata和todate和要显示最后一个ID然后用这个
select MAX(id) id,fromdata, todate from tablename group by fromdata, todate
ID会有些不同,所以我不能够使min(id)... – JetJack 2012-02-27 08:48:47
这将返回3条记录,但OP要2条。 – 2012-02-27 08:50:00
添加更多示例数据然后我们可以给出正确的查询,而不是基于假设的查询 – 2012-02-27 08:50:54
您还可以使用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
,即使这是ASK的要求,这将不会在SQL Server 2000中工作(每个标签,他希望在MSSQL2K) – 2012-02-27 10:08:04
@Noob AS Three Developer OH!很抱歉,我没有注意到标签! – shenhengbin 2012-02-27 10:18:06
从和日期比较不应重复.... – JetJack 2012-02-27 08:39:09
你应该更清楚地解释你通过重复的意思。可能需要添加更多示例数据和预期输出。你还应该添加你尝试过的查询。 – 2012-02-27 08:40:47
使用GROUP BY语句 – 2012-02-27 08:41:07