sql server—如何获取按列2分组并在sql中具有最新日期的数据的列1计数

ilmyapht  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(262)

我正在尝试编写一个查询,其中我希望获得按b列分组的a列的distinct count,但我也希望考虑a列的count在c列中仅具有最新日期,以防a列的数据在b列的多个数据中是公用的。

A           |        B        |           C
---------------------------------------------------
101         |        AB       |      2020-01-04
-----------------------------------------------------
101         |        CD       |      2020-07-27
-------------------------------------------------------
102         |        EF       |      2020-05-30

这里的数据应该是:

A           |         B
----------------------------
1           |        CD
---------------------------
1           |        EF

如果a列有基于c列中日期的重复值,则查询应考虑b列的数据,而忽略其他列的数据。因此,在上面的示例中,cd被认为是分组中的数据,因为它具有列的最新数据,而在a列中,i显示了列的总不同计数,因此b列的数据中不必包含重复值

utugiqy6

utugiqy61#

我希望你能理解你的问题:

DECLARE @T TABLE (A INT, B VARCHAR(128), C DATE)
INSERT @T VALUES (101, 'AB', '2020-01-04'), 
                 (101, 'CD', '2020-07-27'), 
                 (102, 'EF', '2020-05-30')
SELECT COUNT(DISTINCT A) A, B
FROM @T T1
WHERE EXISTS (SELECT 1 FROM @T T2 WHERE T1.A = T2.A GROUP BY A HAVING MAX(C) = T1.C)
GROUP BY B
nfzehxib

nfzehxib2#

你好像在描述:

select b, count(distinct a)
from (select t.*, max(c) over (partition by b) as max_c
      from t
     ) t
where c = max_c
group by b;

我不确定你是否想要这个 a 所有日期的最大值或 b 或者甚至可能来自 a . 以上日期为 b 以及 a 与此相关的值。

相关问题