TSQL独特列

时间:2014-09-16 19:28:30

标签: sql-server tsql stored-procedures

我有一个从表中选择员工的查询。

该表是一个历史表,因此它可以包含同一个人的记录。始终相同的一条数据是A.[qid]。员工姓名可能会更改,因此会在更改后插入另一条记录。

我正在尝试为员工选择最近的记录,这就是我按A.[Meta_LogDate]订购的原因。但是,我只想为员工提供1条记录,而不是所有记录。

当我搜索时,我希望它能给我这张表中的最新记录。

我不认为我可以做Top,因为这是一个ajax调用,在你输入时缩小了员工范围,所以我需要确保列表仍然显示所有可能的选项,而不是重复。

SELECT   DISTINCT(A.[qid]),
         A.[FirstName],
         A.[LastName],
         A.[ntid],
         A.[Meta_LogDate]
FROM     EmpTable_historical AS A
WHERE    A.[LastName] + ', ' + A.[FirstName] LIKE '%' + @name + '%'
ORDER BY A.[LastName], A.[Meta_LogDate] DESC
FOR      XML PATH ('emp'), TYPE, ELEMENTS, ROOT ('results');

1 个答案:

答案 0 :(得分:1)

;WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY qid ORDER BY Meta_LogDate DESC)
    FROM EmpTable_historical 
    WHERE [LastName] + ', ' + [FirstName] LIKE '%' + @name + '%'
)
SELECT *
FROM CTE
WHERE RN = 1