我意识到这就像SQL/mysql - Select distinct/UNIQUE but return all columns?一样,但我完全输了,而且总是那样,报告立即需要......
我想要(全部来自同一张桌子)
首先 - 唯一的AsbestosNumber
秒 - 基于上次调查日期
最后 - 基于那些过滤掉的结果获得最高风险(首先看看它有' A'然后' B'然后' C'那么' D'然后其他任何事情
select AsbestosUPRN, OverallRiskCategory, SurveyDate FROM TblAsbestos GROUP BY AsbestosUPRN, OverallRiskCategory, SurveyDate
但是也尝试了以下哪些不受约束的错误。
SELECT * FROM TblAsbestos
JOIN (SELECT AsbestosUPRN, Max(OverallRiskCategory) FROM TblAsbestos) As Tbl2
On Tbl2.AsbestosUPRN = Tbl1.AsbestosUPRN
ORDER BY Tbl1.AsbestosUPRN
然后,我需要修改报告,以便通过另一个表中的唯一编号进行搜索。
日期示例:
AsbestosUPRN SurveyDate OverallRiskCategory
011203200 2014-01-07 00:00:00.000 N/A
011203200 2014-01-07 00:00:00.000 N/A
011203200 2014-01-07 00:00:00.000 N/A
011203200 2014-01-07 00:00:00.000 C
011203200 2014-01-07 00:00:00.000 N/A
011203200 2014-01-07 00:00:00.000 N/A
030700630 2014-01-10 00:00:00.000 N/A
030700630 2014-01-10 00:00:00.000 N/A
030700620 2014-01-15 00:00:00.000 N/A
030700620 2014-01-15 00:00:00.000 N/A
030700620 2014-01-15 00:00:00.000 N/A
030700620 2014-01-15 00:00:00.000 N/A
030700620 2014-01-15 00:00:00.000 N/A
030700630 2014-01-10 00:00:00.000 N/A
030700630 2014-01-10 00:00:00.000 N/A
修正了工作代码:
select
AsbestosUPRN,
min(OverallRiskCategory) as OverallRiskCategory,
max(SurveyDate) as SurveyDate
FROM TblAsbestos
GROUP BY
AsbestosUPRN
答案 0 :(得分:1)
如果AsbestotosUPRN是唯一的,则它不能全部在一个表中。我假设你有以下表格:
UPRN OverallRiskCategory SurveyDate
1 2 1/1/14
1 5 1/2/14
1 3 1/3/14
2 7 1/1/14
你想得到这样的东西:
UPRN OverallRiskCategory
1 5
2 7
正确?
然后,您应该使用聚合函数:
SELECT UPRN, max(OverallRiskCategoy)
FROM Tbl
GROUP BY UPRN
答案 1 :(得分:1)
如果我正确理解您的问题,您希望UPRN具有UPRN的最新调查日期,该UPRN /日期组合的风险分类最高。如果这是您想要的,那么以下SQL代码应该可以工作。
WITH md AS (
SELECT AsbestosUPRN, Max(SurveyDate) AS maxdate
FROM TblAsbestos
GROUP BY AsbestosUPRN
)
SELECT md.AsbestosUPRN, maxdate, Max(overallriskcategory) AS maxrisk
FROM md, TblAsbestos t
WHERE md.AsbestosUPRN = t.AsbestosUPRN AND
md.maxdate = t.surveydate
GROUP BY md.AsbestosUPRN, maxdate;
请注意,这仅适用于数据库中N / A数据实际为NULL的情况。否则max(overallriskcategory)将始终返回N / A'因为它是最高的'串。如果你需要转换'N / A'为NULL,以下内容应该有效:
UPDATE tblasbestos
SET overallriskcategory = NULL
WHERE overallriskcategory = 'N/A';