仅一组的最后 6 行
Last 6 rows for only one group
我有 table:
label added
1-1 2020-11-09 08:22:37.000
x1 2020-11-09 07:22:37.000
x3 2020-11-09 07:25:43.000
x6 2020-11-09 05:42:37.000
x1 2020-11-07 04:22:37.000
1-1 2020-11-09 08:22:37.000
1-1 2020-11-09 08:22:37.000
1-1 2020-11-06 08:22:37.000
1-1 2020-11-03 08:22:37.000
1-1 2020-11-02 08:22:37.000
1-1 2020-11-01 05:22:37.000
1-1 2020-10-09 01:52:37.000
我想select所有记录,但对于标签“1-1”只有最后 6 条最新记录。
这可能与排名功能一起使用:
SQL * FROM (
SELECT label, added
, RANK() OVER (PARTITION by label order by added desc) as lastN
FROM table
) t
WHERE (label = '1-1' AND lastN <= 6)
但我想知道是否可以做不同的事情?也许没有相关子查询?
您当前的排名查询非常理想,但您也可以在此处使用 TOP
和联合:
SELECT * FROM yourTable WHERE label <> '1-1'
UNION ALL
SELECT * FROM (
SELECT TOP 6 *
FROM yourTable
WHERE label = '1-1'
ORDER BY added DESC
) t;
您可以使用当前的 window 函数,其中 PARTITION BY
也应该被删除,在主查询的 ORDER BY
子句中连同 TOP 6
按顺序在没有子查询的情况下进行查询
SELECT TOP 6 *
FROM [table]
WHERE label = '1-1'
ORDER BY RANK() OVER (ORDER BY added DESC)
在这种情况下,ORDER BY
子句中的 label
列也是多余的,因为在 WHERE
条件中被过滤掉了。
我有 table:
label added
1-1 2020-11-09 08:22:37.000
x1 2020-11-09 07:22:37.000
x3 2020-11-09 07:25:43.000
x6 2020-11-09 05:42:37.000
x1 2020-11-07 04:22:37.000
1-1 2020-11-09 08:22:37.000
1-1 2020-11-09 08:22:37.000
1-1 2020-11-06 08:22:37.000
1-1 2020-11-03 08:22:37.000
1-1 2020-11-02 08:22:37.000
1-1 2020-11-01 05:22:37.000
1-1 2020-10-09 01:52:37.000
我想select所有记录,但对于标签“1-1”只有最后 6 条最新记录。 这可能与排名功能一起使用:
SQL * FROM (
SELECT label, added
, RANK() OVER (PARTITION by label order by added desc) as lastN
FROM table
) t
WHERE (label = '1-1' AND lastN <= 6)
但我想知道是否可以做不同的事情?也许没有相关子查询?
您当前的排名查询非常理想,但您也可以在此处使用 TOP
和联合:
SELECT * FROM yourTable WHERE label <> '1-1'
UNION ALL
SELECT * FROM (
SELECT TOP 6 *
FROM yourTable
WHERE label = '1-1'
ORDER BY added DESC
) t;
您可以使用当前的 window 函数,其中 PARTITION BY
也应该被删除,在主查询的 ORDER BY
子句中连同 TOP 6
按顺序在没有子查询的情况下进行查询
SELECT TOP 6 *
FROM [table]
WHERE label = '1-1'
ORDER BY RANK() OVER (ORDER BY added DESC)
在这种情况下,ORDER BY
子句中的 label
列也是多余的,因为在 WHERE
条件中被过滤掉了。