【发布时间】:2019-10-06 09:30:32
【问题描述】:
我需要根据条件找到不同类别的数据:Breakground、Energization 和 PR。前两个类别很好。数据是一对一的映射。问题是公关类别。此类别中有多个日期。我需要在此类别中找到 min(MilestoneDate),但 min(MilesotoneDate) 必须大于今天并且最接近今天。
Following are table data:
Site Building MilestoneID MilestoneType MilestoneDate
AGE building1 MIC.MS.1000 Breakground 1/1/18
AGE building1 MIC.ACT.1000 Energization 2/3/19
AGE building1 PTM.B1.1130 PR 2/5/19
AGE building1 PTM.B1.1140 PR 3/4/20
AGE building1 PTM.B1.1150 PR 12/25/20
AGE building1 PTM.B1.1160 PR 5/25/22
AGE building2 MIC.MS.1000 Breakground 2/2/19
AGE building2 MIC.ACT.1000 Energization 12/5/19
AGE building2 PTM.B2.1130 PR 3/5/20
AGE building2 PTM.B2.1140 PR 8/10/20
AGE building2 PTM.B2.1150 PR 3/4/21
AGE building2 PTM.B2.1160 PR 5/4/22
OCA building1 MIC.MS.1000 Breakground 4/2/19
OCA building1 MIC.ACT.1000 Energization 5/4/20
OCA building1 PTM.B1.1130 PR 6/8/21
OCA building1 PTM.B1.1140 PR 12/2/21
OCA building1 PTM.B1.1150 PR 3/5/22
OCA building1 PTM.B1.1160 PR 12/30/22
WITH 管理视图 AS ( 选择 * FROM management_view_nancy m 左连接 ( 选择 * 从 ( 选择项目对象ID, id 作为activity_id, 完成日期作为里程碑日期, 命名为里程碑 从活动 哪里 ds = ( 选择最大值(ds) 来自活动) 联合所有 选择项目对象ID, id 作为activity_id, Min(finishdate) 作为完成日期, 姓名 从活动 在哪里 id ('LRP-RVA-B3-FS1000', 'LRP-RVA-B3-PR1000', 'LRP-RVA-B3-PR1500') AND 项目对象 ID = 4908 按项目对象ID分组, ID, 名称))p ON try_cast(m.objectid as DOUBLE) = p.projectobjection AND m.id = p.activity_id ) , pr AS ( 选择 *, row_number() OVER (按站点、建筑物、里程碑类型进行分区 ORDER BY try(cast(substr(milestonedate, 1, 10) AS date))) rn FROM管理视图 WHERE try(cast(substr(milestonedate, 1, 10) AS date)) >= CURRENT_DATE 和修剪(里程碑类型)='公关') 选择网站, 建筑, ID, 里程碑类型, 里程碑, 里程碑日期 FROM管理视图 WHERE 里程碑类型 IN ('Breakground', '通电') 联合所有 选择网站, 建筑, ID, 里程碑类型, 里程碑, 里程碑日期 来自公关 其中 rn = 1
查询工作正常,但没有得到我想要的结果。我需要 PR 类别中的 min(MilestoneDate),min(MilestoneDate) 应该大于今天但最接近今天。这个查询仍然给了我 PR 类别中的多个 MilestoneDate。任何建议将不胜感激
【问题讨论】: