我目前正在尝试将一个表自身连接起来,以确定日期之间的差异。条目列出了具有不同ID的不同单元的属性。每次编辑条目时,它都会添加具有新属性的新条目,而不是重写它。我正在尝试查找开始日期或结束日期不同的所有条目。我可以找到日期更改的所有条目,但是会显示重复的内容,例如:
ID StartDate1 EndDate1 StartDate2 EndDate2
1 1/12/2018 1/15/2018 1/13/2018 1/16/2018
1 1/13/2018 1/16/2018 1/12/2018 1/15/2018
我的代码如下:
SELECT DISTINCT u1.ID, u1.FirstNight, u1.LastNight, u2.FirstNight, u2.LastNight
FROM units u1
LEFT JOIN units u2 ON u2.ID = u1.ID
WHERE ((u1.firstnight <> u2.firstnight) AND (u1.lastnight <> u2.lastnight)
我该如何删除重复的条目?
谢谢!
答案 0 :(得分:1)
我认为您的查询本应具有
u2.ID != u1.ID
停止每一行连接到自己。
将该条件更改为:
u2.ID < u1.ID
每对仅返回1个版本。
答案 1 :(得分:0)
对于您想做的事情,没有简单的解决方案。您必须对字段的值进行一些调整才能获得所需的结果。
尝试此SQL代码
create table dates (id int, first date, last date);
insert into dates (id, first, last) VALUES (1, '2018/03/11', '2018/5/11');
insert into dates (id, first, last) VALUES (1, '2018/08/11', '2018/10/11');
insert into dates (id, first, last) VALUES (1, '2018/03/25', '2018/09/16');
insert into dates (id, first, last) VALUES (1, '2018/02/25', '2018/04/16');
insert into dates (id, first, last) VALUES (2, '2018/05/10', '2018/08/09');
insert into dates (id, first, last) VALUES (2, '2018/09/15', '2018/07/18');
SELECT id1, first1, last1, id2, first2, last2 FROM
(
SELECT distinct
d1.id id1,
d1.first first1,
d1.last last1,
d2.id id2,
d2.first first2,
d2.last last2,
ROW_NUMBER() OVER(PARTITION BY (d1.first + d2.first)) rn
FROM dates d1
JOIN dates d2 ON d2.id = d1.id
WHERE (d1.first <> d2.first) AND (d1.last <> d2.last)
) AS DataResult
WHERE rn = 1;
最后,计算按自联接表中的“首次日期的总和”划分的所有元素
外部查询除了使用“行数”字段中计算为限制为1的行数之外,还选择要减去“行号”字段的所需字段。
这里是SQL Fiddle,要进行更多测试!