sql 难以计算一列并获取具有相同内容的最旧的 id

问题描述 投票:0回答:1

我正在 mvc .net core 中制作一个学校项目,人们应该能够发送请求帮助并将其显示在屏幕上,我的困难在于其他人应该能够想要同样的部分帮助,但我只想使用最旧的用户 ID 显示一次请求,并能够计算有多少人有相同的请求。

现在我用了3张桌子

  • tableUser - 存储所有用户信息

  • 帮助列表 - 存储问题的描述以及一些其他信息以将其发送到正确的视图

  • FH 存储来自帮助列表的 id 和用于连接的用户 id,并使人们从帮助列表 id 请求相同的帮助

我尝试过以下 SQL,但我不明白如何在计算描述时获取最旧的用户 ID,

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 用于仅选择与某人屏幕上的视图相同的视图)

c# sql .net model-view-controller
1个回答
1
投票

您可以修改 SQL 查询以使用子查询来选择与每个描述关联的最旧的用户 ID。然后,您可以将此子查询与主查询连接起来,以根据最旧的用户 ID 过滤掉重复的描述。具体方法如下:

SELECT 
    COUNT(*) AS Hcount,
    h.Description,
    h.HID
FROM 
    helplist AS h
INNER JOIN 
    FH AS f ON h.HID = f.HID
INNER JOIN 
    UserTable AS u ON f.UID = u.UID
WHERE 
    h.KID = @KID 
    AND h.Hstatus = 'Active' 
    AND f.Fdatum = (
        SELECT 
            MIN(Fdatum) 
        FROM 
            FH 
        WHERE 
            HID = h.HID
    )
GROUP BY 
    h.Description, h.HID

关键部分是

WHERE
子句中的子查询。此子查询选择与每个
MIN
关联的最小 (
Fdatum
)
HID
,有效地为我们提供每个描述的最旧的用户 ID。

此查询应为您提供每个唯一描述的计数以及与其关联的最旧的用户 ID。

© www.soinside.com 2019 - 2024. All rights reserved.