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

ASP.NET Core MVC项目SQL查询:统计重复求助并获取最早用户ID

问题需求

开发ASP.NET Core MVC学校项目,用户可提交求助请求并展示在屏幕上。要求:当多人请求同一帮助时,仅显示一次该请求,同时展示最早提交的用户ID,并统计相同请求的人数。

数据库表结构

  • tableUser:存储所有用户信息
  • helplist:存储问题描述及匹配视图的其他信息
  • FH:关联helplist的ID与用户ID,记录用户对同一求助的请求

尝试的SQL语句

原语句(瑞典语):

SELECT Count (Beskrivning) AS HANTAL, Beskrivning, Hjalplista.HID
From ((FH INNER JOIN UserTable ON UserTable.UID = FH.UID)
      INNER JOIN Hjalplista ON Hjalplista.HID = FH.HID)
WHERE Hjalplista.KID = @KID AND Hstatus= 'Aktiv'
GROUP BY Beskrivning, Hjalplista.HID, FH.Fdatum
ORDER BY Fdatum ASC

翻译后(中文对应字段):

SELECT Count (Description) AS Hcount, Description, helplist.HID
From ((FH INNER JOIN UserTable ON UserTable.UID = FH.UID)
      INNER JOIN helplist ON helplist.HID = FH.HID)
WHERE helplist.KID = @KID AND Hstatus= 'Active'
GROUP BY Description, helplist.HID, FH.Fdate
ORDER BY Fdate ASC

注:KID用于筛选与当前用户屏幕视图一致的请求

解决方案

你的原SQL错误地将Fdate加入GROUP BY,导致同一求助的不同提交记录被拆分显示。以下是两种可行的修正方案,实现统计人数+获取最早提交用户ID的需求:

方案1:关联子查询实现

SELECT 
    COUNT(fh.UID) AS Hcount,
    h.Description,
    h.HID,
    -- 子查询获取当前求助下最早提交的用户ID
    (SELECT TOP 1 ut.UID 
     FROM FH fh_sub 
     JOIN UserTable ut_sub ON fh_sub.UID = ut_sub.UID
     WHERE fh_sub.HID = h.HID
     ORDER BY fh_sub.Fdate ASC) AS FirstSubmitterUID
FROM FH fh
JOIN UserTable ut ON fh.UID = ut.UID
JOIN helplist h ON fh.HID = h.HID
WHERE h.KID = @KID AND h.Hstatus = 'Active'
GROUP BY h.Description, h.HID
-- 按最早提交时间排序
ORDER BY (SELECT MIN(fh_sub.Fdate) FROM FH fh_sub WHERE fh_sub.HID = h.HID) ASC

方案2:窗口函数实现(更简洁)

WITH RankedRequests AS (
    SELECT 
        h.Description,
        h.HID,
        ut.UID,
        fh.Fdate,
        -- 统计当前求助的总请求人数
        COUNT(*) OVER (PARTITION BY h.HID) AS Hcount,
        -- 按提交时间给同一求助的记录排名,最早的排第1
        ROW_NUMBER() OVER (PARTITION BY h.HID ORDER BY fh.Fdate ASC) AS RowNum
    FROM FH fh
    JOIN UserTable ut ON fh.UID = ut.UID
    JOIN helplist h ON fh.HID = h.HID
    WHERE h.KID = @KID AND h.Hstatus = 'Active'
)
-- 仅取排名第1的记录(最早提交)
SELECT 
    Description,
    HID,
    UID AS FirstSubmitterUID,
    Hcount
FROM RankedRequests
WHERE RowNum = 1
ORDER BY Fdate ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:53:15