Как удалить дубликаты строк SQL на основе 1 столбца, сравнивая 2 разных столбца даты? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть запрос, который объединяет несколько таблиц / представлений и отображает строки, идентифицируемые столбцом с именем VIN. Я хочу показывать VIN только один раз, основываясь на самой последней дате из двух разных полей даты (ОТКРЫТАЯ ДАТА И ДАТА ИНВОЙСА), ЕСЛИ обе даты имеют значение.

Если Дата счета-фактуры равна нулю, покажите строку с самой последней Открытой датой для этого VIN. Например, если у меня есть 3 строки для VIN = 'XY123456' и

В строке 1 отображается Дата открытия 01.03.2009 и Дата счета-фактуры NULL, а

В строке 2 отображается Дата открытия 15.03.2009 и Дата счета-фактуры 28.03.2009, а также

Строка 3 показывает дату открытия 4/1/2019 и дату выставления счета 4/5/2019,

Я хочу вернуть строку 1, поскольку Дата счета-фактуры равна NULL, и это самая последняя Открытая дата для этого VIN.

Если бы была дата счета-фактуры для строки 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')

Пример результатов:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...