从多列中选择时如何在一列中使用 DISTINCT

How to use DISTINCT in one column when SELECTING from many columns

我正在尝试 select 来自两个不同视图的列,但我只想在一个特定列上使用 DISTINCT 语句。我认为使用 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]

我想在 [Act].[ClientId] 上使用 DISTINCT 语句。有什么办法吗?

据推测,您想要 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. 日期采用标准格式(YYYY-MM-DD 或 YYYYMMDD)。
  2. BETWEEN被两个不等式代替。如果日期确实是带有时间分量的 date/time,这会使代码健壮。