有计数(〜)> 1未按预期删除

时间:2017-03-13 19:21:31

标签: sql db2

我有这个问题:

select cast(A.when as date) as purchase_date, A.id 
from purchase A
group by cast(A.when as date), A.id order by A.id

结果:

PURCHASE_DATE ID
------------- ------
04/20/1999         1
12/01/2001         1
08/08/1998         2
02/13/1999         2
04/16/1999         2
02/23/2001         2
04/24/2001         2
10/21/2001         2
12/01/2001         2
01/27/1998         3
10/06/2001         3
06/13/2000         4
06/30/2001         4
08/11/2001         4
07/17/2001         5

我想做什么:

我想要做的是从上面只有一个cid和一个purchase_date的结果中删除cids及其purchase_date。所以在上面的结果中,我想为cid 5删除1行。

因此,我运行了以下查询:

select B.id, B.purchase_date from (select cast(A.when as date) as
purchase_date, A.id from purchase A group by cast(A.when as date),
A.id order by A.id) B group by B.id, B.purchase_date having
count(B.id) > 1

您将看到我在此页面顶部建议的第一个查询成为上述查询的子查询,我尝试使用“有计数(B.id)> 1”删除任何只有1个ID的行但是失败了。

结果如下:

ID    PURCHASE_DATE
------ -------------

  0 record(s) selected.

enter code here

我认为“有计数(B.id)> 1”会删除任何只有一个id的行,但事实并非如此。我怎么能这样做?

预期结果应如:

ID    PURCHASE_DATE
------ -------------
     1 04/20/1999
     1 12/01/2001
     2 08/08/1998
     2 02/13/1999
     2 04/16/1999
     2 02/23/2001
     2 04/24/2001
     2 10/21/2001
     2 12/01/2001
     3 01/27/1998
     3 10/06/2001
     4 06/13/2000
     4 06/30/2001
     4 08/11/2001

只应删除带有5的id。

2 个答案:

答案 0 :(得分:1)

只按ID分组,而不是ID和purchase_date:

select id, count(*) from test group by id having count(*) > 1

答案 1 :(得分:0)

问题在于您按ID和日期进行分组。当你这样做时,如果你having count(id),分组已经完成并且having我们将反对这两个列并不重要。

您需要另一个子查询,其ID不会出现多次,并使用A.id in (...)