列出每个id的最后两个记录

时间:2014-05-26 17:50:18

标签: sql sql-server

下午好!

我无法列出每个idmicro的最后两个记录

例如:

idhist  idmicro idother     room     unit              Dtmov
100     1102        0         8      coa       2009-10-23 10:40:00.000
101     1102        0         1      coa       2009-10-28 10:40:00.000
102     1102        0         2       dib       2008-10-24 10:40:00.000
103     1201        0         6      diraf     2008-10-23 10:40:00.000
104     1201        0         7      diraf     2009-10-21 10:40:00.000
105     1201        0         4     dimel     2008-10-22 10:40:00.000

看起来像这样:

例如:

结果

idhist  idmicro idoutros    room      unit               Dtmov
101     1102        0         1       coa      2009-10-28 10:40:00.000
102     1102        0         2       dib      2008-10-24 10:40:00.000
103     1201        0         6      diraf     2008-10-22 10:40:00.000
104     1201        0         7      diraf     2009-10-21 10:40:00.000

我开始深入研究SQL并且无法找到这个解决方案

抱歉

谢谢。

编辑:我使用的是SQL服务器,但我没有查询。 是!基于日期和时间

3 个答案:

答案 0 :(得分:3)

您可以使用复杂的SELECT语句执行相同的操作。

SELECT *
FROM (
    SELECT row_number() OVER (
            PARTITION BY idmicro ORDER BY idhist
            ) AS ind
        ,*
    FROM data
    ) AS initialResultSet
WHERE initialResultSet.ind < 3

以下是此查询的工作原理SQLFiddle示例。

答案 1 :(得分:1)

WITH etc
AS (
    SELECT *
        ,row_number() OVER (
            PARTITION BY idmicro ORDER BY idhist
            ) AS r
        ,count() OVER (
            PARTITION BY idmicro ORDER BY idhist
            ) cfrom TABLE
    )
SELECT *
FROM etc
WHERE r > c - 2

答案 2 :(得分:0)

使用row_number和over partition

SELECT *
FROM (
    SELECT *, row_number() OVER (PARTITION BY idmicro ORDER BY idhist desc) AS rownum
    FROM data
    ) AS initialResultSet
WHERE initialResultSet.rownum<=2