ms访问中的多个查询数据

问题描述

我在accdb中有一个表,该表由几列组成。其中包括社会安全号码,几个日期和货币值。我试图在这里查询数据(accdb中有超过600万个结果)。

社会保险号可以在数据库中出现一次或多次。同一行(在不同列中)的日期和货币值可以不同,也可以不同。

所以说我的桌子看起来像这样:

Ssn      Date1         Date2       moneyvalue   PostDate
123455  12-01-20      03-04-20     5.21        (A datettime value )     

我正在尝试做几件事:

首先,我只想选择在数据库中至少出现两次(或更多)的ssn。

从这些结果中,我只想获得date1等于date2的结果。

从这些结果中,我想得到每个ssn的moneyvalue中具有不同值的结果。 我想将ssn的moneyvalue与该ssn首次出现在数据库中的货币值进行比较(因此postDate中日期时间最旧的那个),如果它们的moneyvalue不同,则发布此ssn。

这可能吗?我将如何进行呢?我必须在ms Access sql窗口中执行此操作,由于受保护,因此无法将数据库导出到mssql

所以总结一下:

我想检索出现在数据库中两次或更多次的所有ssn,其中date1等于date2,并且记录x中的货币值与postDate最早的ssn中的货币值不匹配。

解决方法

您的问题表明存在聚集和多个having子句:

select ssn
from mytable
group by ssn
having 
    count(*) > 1
    and sum(iif(date1 = date2,1,0)) > 1
    and count(distinct moneyvalue) > 1

另一种解释是条件where的{​​{1}}子句:

date1 = date2

但是,这两个查询并不相同,我的理解是第一个是您要的。