【发布时间】:2022-01-23 07:59:29
【问题描述】:
我已经在 SQL 中构建了一个查询,但我想进一步缩小结果范围,但不知道如何去做。不确定我是否需要使用 Case 语句?我使用 WITH 只是因为它更容易引用我使用 case 语句创建的新列。
这是我的代码:
WITH Analysis as (
SELECT
MPOINTNAME
,eff_date as MPEFFDATE
,end_date as MPENDDATE
,CASE
When `eff_date = '01-NOV-21' Then 'New detail'
when end_date = '01-OCT-21' Then 'Expired detail'
End detail
FROm Measurementpoint
GROUP BY MPOINTNAME, eff_date, end_date )
SELECT
a.mpointname
,a.mpeffdate
,a.mpenddate
,a.detail`
From Analysis a
order by a.mpointname
这是输出:
MPOINTNAME `MPEFFDATE `MPENDDATE `Detail`
11-15 01-NOV-21` 01-DEC-12` New detail`
11-15 01-NOV-20 01-OCT-21` `Expired detail`
06-15 01-NOV-21 01-DEC-12 New detail`
03-15 01-NOV-21` 01-DEC-12` New detail
03-15 01-NOV-20 01-OCT-21` `Expired detail`
07-15 01-NOV-21 01-DE-12C New detail`
现在,我只想包含只有“新详细信息”的 MPOINTNAME。这告诉我它是全新的,而其他只是一个新细节,但他们有一个前一个月过期的细节。我不知道如何获得这些结果。基本上我只想显示两行,第三行和最后一行。我们的系统将新详细信息的结束日期默认为 2012 年 12 月 1 日。 谢谢 马克
`
【问题讨论】:
-
首先,使用字符串常量对于未来的工作来说是一种非常(非常)糟糕的方式,但除此之外:如果我是正确的,你只希望 06-15 和 07-15 出现(来自您提到的列表)作为“新细节”对吗?
标签: sql