Sha*_*sra 6 sql t-sql sql-server sql-server-2005 sql-server-2008
如果记录具有几乎相同类型的数据,如何选择最新记录...
例:
col1 col2 col3 col4
--------------------------------------------------
123 abc 1.1 12345
123 abc 1.1 123445
1234 dsv 2.0 123
1234 dsv 2.0 1233
12345 dsvw 1.2 1234
Run Code Online (Sandbox Code Playgroud)
col4
与其余列进行比较时的最大值.
看到row1和row2数据看起来很相似,但我们需要基于col4的最新数据.
与row3和row4相同,数据看起来相似但我们需要基于col4的最新数据.
并且所需的输出是:
col1 col2 col3 col4
----------------------------
123 abc 1.1 123445
1234 dsv 2.0 1233
12345 dsvw 1.2 1234
Run Code Online (Sandbox Code Playgroud)
我假设"最新"意味着"最大"?
DECLARE @t TABLE
(
col1 INT,
col2 CHAR(3),
col3 DECIMAL(4,1),
col4 INT
);
INSERT @t SELECT 123, 'abc', 1.1, 12345
UNION SELECT 123, 'abc', 1.1, 123445
UNION SELECT 1234, 'dsv', 2.0, 123
UNION SELECT 1234, 'dsv', 2.0, 1233;
WITH t AS
(
SELECT col1, col2, col3, col4,
rn = ROW_NUMBER() OVER
(PARTITION BY col1 ORDER BY col4 DESC)
FROM @t
)
SELECT col1, col2, col3, col4
FROM t
WHERE rn = 1;
Run Code Online (Sandbox Code Playgroud)
使用:
WITH example AS (
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY t.col1
ORDER BY t.col4 DESC) AS rnk
FROM YOUR_TABLE t)
SELECT e.*
FROM example e
WHERE e.rnk = 1
Run Code Online (Sandbox Code Playgroud)
..或者:
SELECT e.*
FROM (SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY t.col1
ORDER BY t.col4 DESC) AS rnk
FROM YOUR_TABLE t) e
WHERE e.rnk = 1
Run Code Online (Sandbox Code Playgroud)
CTE 不提供对派生表方法的任何优化。
归档时间: |
|
查看次数: |
1108 次 |
最近记录: |