Как использовать DISTINCT в одном столбце при выборе из нескольких столбцов - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь выбрать столбцы из двух разных представлений, но я хочу использовать оператор DISTINCT только для одного указанного c столбца. Я думал, что с помощью оператора GROUP BY будет работать, но он выдает ошибку.

SELECT DISTINCT
            [Act].[ClientId]
    ,       [Ref].[Agency]
    ,       [Act].[FundCode]
    ,       [Act].[VService]
    ,       [Act].[Service]
    ,       [Act].[Attended]
    ,       [Act].[StartDate]
FROM [dbo].[FS_v_CrossReference_ALL] AS [Ref] 
    INNER JOIN [dbo].[FS_v_Activities] AS [Act] ON [Ref].[VendorId] = [Act].[VendorId]
WHERE [Act].[StartDate] BETWEEN '1/1/2015' AND '12/31/2015'
GROUP BY [Act].[ClientId]

Я хочу использовать оператор DISTINCT для [Act].[ClientId]. Есть ли способ сделать это?

1 Ответ

1 голос
/ 21 февраля 2020

Предположительно, вы хотите row_number():

SELECT ar.*
FROM (SELECT Act.*, Reg.Agency,
             ROW_NUMBER() OVER (PARTITION BY Act.ClientId ORDER BY ACT.StartDate DESC) as seqnum
      FROM [dbo].[FS_v_CrossReference_ALL] [Ref] JOIN
           [dbo].[FS_v_Activities] Act
           ON [Ref].[VendorId] = [Act].[VendorId]
      WHERE [Act].[StartDate] >= '2015-01-01' AND
            [Act].[StartDate] < '2016-01-01' 
    ) ar
WHERE seqnum = 1;

Особо обратите внимание на изменения в сравнении дат:

  1. Даты в стандартном формате (ГГГГ-ММ-ДД или ГГГГММДД).
  2. BETWEEN заменяется двумя неравенствами. Это делает код устойчивым, если дата действительно является датой / временем с компонентом времени.
...