使用多个返回集从数据库中选择最近的行

时间:2012-03-30 17:42:43

标签: sql sql-server

通常我会这样做

select top (1) * from table where id active = '1' and doc_type_id = '404'

获取最新一行。

但是我使用IN来取回结果。加上一个加入。

select t1.* 
  from table1 t1 left join table2 t2 on (t1.propid = t2.propid)
 where t2.caseid in ('100','101') and t1.active = '1' and b.doc_type_id = '404'

此查询返回文档。但是,有多个相同类型的文档。 如果每个人都有10个文档,我只需要最新的文档。

我想从数据库中只检索每个最新的1个文档。

我希望自己解释一下:)

2 个答案:

答案 0 :(得分:0)

这是窗口功能的理想方案。它们正是您所需要的。请查看over关键字。

答案 1 :(得分:0)

如果您没有看到要使用的返回类型,则需要使用GROUP BY和/或MAX。如果这无法解决您的问题,请您发布样本数据集以及您期望的内容吗?

您甚至可以使用partitioning和/或ROW_NUMBER()

基于评论的更新

WITH myCTE
AS
(
    SELECT t1.*, 
        ROW_NUMBER() OVER (PARTITION BY t2.caseid ORDER BY LastSavedDate DESC) AS RowNumber
    FROM table1 t1 
        LEFT JOIN table2 t2 
            ON t1.propid = t2.propid
    WHERE t2.caseid in ('100','101') 
        AND t1.active = '1' AND b.doc_type_id = '404'
)
SELECT * 
FROM myCTE
WHERE RowNumber = 1;

根据您的意见,这可能适合您