sql - 如何通过比较 2 个不同的日期列来删除基于 1 列的重复 SQL 行?
问题描述
我有一个查询,它连接多个表/视图并显示由名为 VIN 的列标识的行。如果两个日期都有一个值,我只想根据 2 个不同日期字段(打开日期和发票日期)的最近日期显示一次 VIN。
如果 Invoice Date 为 Null,则显示具有该 VIN 的最近 Open Date 的行。例如,如果我有 3 行 VIN='XY123456' 和
第 1 行显示打开日期 2019 年 3 月 1 日和发票日期 NULL,以及
第 2 行显示打开日期 2019 年 3 月 15 日和发票日期 2019 年 3 月 28 日,以及
第 3 行显示打开日期 4/1/2019 和发票日期 4/5/2019,
我想返回第 1 行,因为 Invoice Date 为 NULL,并且它是该 VIN 的最近 Open Date。
如果第 1 行有发票日期,我们将返回任一日期列中最近日期的行。
我试过 ELSE 子句和 COALASCE 没有成功。我还尝试做一个子查询来使用 MAXDATE。
SELECT RO.[RepairOrderID]
,RO.[CompanyName]
,CUS.CustomerKey
,UN.UnitNumber AS 'UNIT #'
,ISNULL(UC.[Tag #],'') AS 'S #'
,UN.Year
,UN.Make
,UN.Model
,UN.VIN
,ROS.[RepairOrderStatus] AS 'STATUS'
,RO.RepairOrderNumber AS 'RO #'
,CONVERT(VARCHAR(2),DATEPART(month, RO.[OpenDate]))
+ '/'+ CONVERT(VARCHAR(2),DATEPART(DAY, RO.[OpenDate]))
+ '/' + CONVERT(VARCHAR(4),DATEPART(YEAR, RO.[OpenDate]))
'OPEN DATE'
,CONVERT(VARCHAR(2),DATEPART(month, ROI.InvoiceDate))
+ '/'+ CONVERT(VARCHAR(2),DATEPART(DAY, ROI.InvoiceDate))
+ '/' + CONVERT(VARCHAR(4),DATEPART(YEAR, ROI.InvoiceDate))
'INVOICE DATE'
FROM [ProfitMaster].[dbo].[RepairOrder] RO with (nolock)
INNER JOIN [ProfitMaster].[dbo].[vwAC_SSR_Customer] CUS with (nolock)
ON CUS.CustomerID = RO.CustomerID
INNER JOIN [ProfitMaster].[dbo].[RepairOrderStatus] ROS with (nolock)
ON ROS.RepairOrderStatusID = RO.RepairOrderStatusID
LEFT OUTER JOIN [ProfitMaster].[dbo].[RepairOrderInvoice] ROI with (nolock)
ON ROI.RepairOrderID = RO.RepairOrderID
LEFT OUTER JOIN [ProfitMaster].[dbo].[vwSR_SSR_Unit] UN with (nolock)
ON UN.UnitInventoryID = RO.UnitInventoryID
LEFT OUTER JOIN [ProfitMaster].[dbo].[vwSR_SSR_UnitCharacteristics] UC with (nolock)
ON UC.UnitInventoryID = Ro.UnitInventoryID
WHERE ((ROS.RepairOrderStatus IN ('OPEN')
OR (ROS.RepairOrderStatus = 'QUOTE' AND RO.OpenDate >= (getDate()- 90)))
OR (ROS.RepairOrderStatus = 'INVOICED' AND ROI.InvoiceDate > '2019-01-01 00:00:00.000'))
AND (CUS.InternalAccount = '0' AND CUS.InternalLRCustomer = '0')
结果样本:
解决方案
推荐阅读
- swift - 从标签创建计时器时,使用 Xcode 的 Swift 5 出错
- chromecast - 我可以在 CAF 接收器上使用其他 HLS 播放器吗?
- c - 在两个不同的结构之间转换
- ios - 在 iOS (Swift) 中创建 PDF 时自动分页
- node.js - SyntaxError: Unexpected token < in JSON at position 0", 来源:devtools://devtools/bundled/shell.js
- c# - 如何在 xamarin 表单 Web 视图中创建新选项卡
- javascript - 加载进度 gif 图像在弹出窗口完全加载之前不会出现在浏览器中
- python - 通过从列中获取值来连接
- c - macOS 上 Homebrew 的 LLVM “致命错误:找不到‘stdio.h’文件”
- twitter-bootstrap - 引导程序 4 中按钮的偏移量