c# - ASP.NET SQL 消除重复 ID
问题描述
我有两个用于记录伤口愈合进程的数据库表。这些是像这样连接在wound_id-Column上的:
所以对于一个伤口,我可以创造许多进步来展示它的愈合。这工作正常。
这是表格的代码:
表伤口_详细信息:
CREATE TABLE [dbo].[epadoc_mod_wound_details] (
[wound_id] INT IDENTITY (1, 1) NOT NULL,
[wound_type] VARCHAR (500) NULL,
[wound_description] VARCHAR (500) NULL,
[decuGrade] INT NULL,
[wound_comments] VARCHAR (500) NULL,
[wound_timeReal] DATETIME NULL,
[wound_timeGiven] DATETIME NULL,
[casenumber] INT NULL,
[username] VARCHAR (50) NULL,
[infectionstate] VARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([wound_id] ASC)
);
表wound_progress:
CREATE TABLE [dbo].[epadoc_mod_wound_progress] (
[progress_id] INT IDENTITY (1, 1) NOT NULL,
[wound_length] INT NULL,
[wound_width] INT NULL,
[wound_depth] INT NULL,
[wound_surrounding] VARCHAR (500) NULL,
[wound_consistence] VARCHAR (500) NULL,
[wound_state] VARCHAR (200) NULL,
[wound_painscale] INT NULL,
[wound_itch] INT NULL,
[wound_id] INT NULL,
PRIMARY KEY CLUSTERED ([progress_id] ASC),
CONSTRAINT [FK_epadoc_mod_wound_progress_fk] FOREIGN KEY ([wound_id]) REFERENCES [dbo].[epadoc_mod_wound_details] ([wound_id]) ON DELETE CASCADE
);
然后我写了一个 SELECT-Query 来显示为患者记录的特定病例编号的所有伤口:
SELECT DISTINCT
dbo.epadoc_mod_wound_details.wound_id, dbo.epadoc_mod_wound_details.casenumber, dbo.epadoc_mod_wound_details.wound_type, dbo.epadoc_mod_wound_progress.progress_id, dbo.epadoc_mod_wound_details.wound_comments, dbo.epadoc_mod_wound_details.wound_timeReal, dbo.epadoc_mod_wound_details.username
FROM dbo.epadoc_mod_wound_details LEFT JOIN
dbo.epadoc_mod_wound_progress
ON dbo.epadoc_mod_wound_details.wound_id = dbo.epadoc_mod_wound_progress.wound_id
WHERE dbo.epadoc_mod_wound_details.casenumber = @casenr;
虽然这工作正常,但问题是所有伤口进展都显示在 GridView 中,这是一个示例,因此您可以了解我的意思:
我想要做的只是显示一个伤口的最新进展,所以对于上面的例子,只显示progressID 65的最后一个条目:
33 65 1111111 Dekubitus
34 .. ....... .........
SELECT DISTINCT 方法不起作用,我也尝试使用 MAX(progressID) 但我似乎总是出错。我想我必须在 JOIN 之前使用 ORDER BY 或第二个 SELECT-Query 做一些事情。
感谢您的任何建议!
解决方案
您应该在查询中GROUP BY
结合使用MAX
。
SELECT
dbo.epadoc_mod_wound_details.wound_id,
dbo.epadoc_mod_wound_details.casenumber,
dbo.epadoc_mod_wound_details.wound_type,
MAX(dbo.epadoc_mod_wound_progress.progress_id) AS progress_id,
dbo.epadoc_mod_wound_details.wound_comments,
dbo.epadoc_mod_wound_details.wound_timeReal,
dbo.epadoc_mod_wound_details.username
FROM
dbo.epadoc_mod_wound_details
LEFT JOIN
dbo.epadoc_mod_wound_progress ON
dbo.epadoc_mod_wound_details.wound_id = dbo.epadoc_mod_wound_progress.wound_id
GROUP BY
dbo.epadoc_mod_wound_details.wound_id,
dbo.epadoc_mod_wound_details.casenumber,
dbo.epadoc_mod_wound_details.wound_type,
dbo.epadoc_mod_wound_details.wound_comments,
dbo.epadoc_mod_wound_details.wound_timeReal,
dbo.epadoc_mod_wound_details.username;
推荐阅读
- c++ - 使用给定数据增加十六进制值
- stored-procedures - 即使 return 未定义为 out 参数,您能否使用 cfstoredproc 访问存储过程的返回?
- json - 尝试将 json 作为电子邮件信息发送到 api(Sendgrid) 时出现 400 BAD REQUEST 错误
- swift - 如何将视图输入参数传递给 @State 变量?
- windows - ffmpeg 在 forfiles 循环中调用时覆盖输入文件
- google-sheets - 逻辑公式:倍数的与或
- google-sheets - 寻找没有重叠日期的最低值
- python - Python 错误 - 无法导入我的要求
- micro-frontend - 如何使用 templateUrl 实现 Piral Angular 组件?
- javascript - 在移动/Chrome 中自动播放视频