You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL按指定mit_rel分组统计数量并获取最新状态?

问题描述

我编写了如下SQL查询:

SELECT mit_rel, status, updatedate
FROM carts
WHERE mit_rel::integer in (60855, 60763, 60607)

查询结果如下:

mit_relstatusupdatedate
60607202023-03-09 11:08:54
60607202023-03-15 10:15:31
60763312023-03-17 16:26:01
60607312023-03-17 10:13:34
6060752023-03-15 14:39:41
60763312023-03-17 14:50:46
60855992023-04-21 17:37:17

我需要获取每个mit_rel的count(mit_rel)(命名为countr),以及按updatedate排序的最新status和对应的updatedate,期望得到如下结果:

mit_relstatusupdatedatecountr
60607312023-03-17 10:13:344
60763312023-03-17 16:26:012
60855992023-04-21 17:37:171

解决方案

可以使用窗口函数实现需求,具体SQL如下:

WITH cart_summary AS (
    SELECT 
        mit_rel,
        status,
        updatedate,
        COUNT(mit_rel) OVER (PARTITION BY mit_rel) AS countr,
        ROW_NUMBER() OVER (PARTITION BY mit_rel ORDER BY updatedate DESC) AS rn
    FROM carts
    WHERE mit_rel::integer IN (60855, 60763, 60607)
)
SELECT mit_rel, status, updatedate, countr
FROM cart_summary
WHERE rn = 1
ORDER BY mit_rel;

逻辑说明

  1. 统计分组总数:通过COUNT(mit_rel) OVER (PARTITION BY mit_rel),在每个mit_rel分组内计算记录条数,得到countr字段。
  2. 标记最新记录:用ROW_NUMBER() OVER (PARTITION BY mit_rel ORDER BY updatedate DESC),按mit_rel分组后将记录按更新时间倒序排列,最新的记录会被标记为rn=1。
  3. 筛选目标数据:外层查询只保留rn=1的记录,即可得到每个分组的最新状态、对应时间以及总数。

该写法适配大多数主流数据库(如PostgreSQL、MySQL 8.0+、SQL Server等)。

内容的提问来源于stack exchange,提问作者hakuna_matata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:42:46