根据另一个字段的顺序选择顶部字段

时间:2010-12-30 17:55:05

标签: sql-server ms-access

很抱歉,标题很难理解 - 我不太清楚如何描述我想做的事情。假设我有这张桌子。 test1和test2是int列,而test3是字符串/ varchar:

test1 | test2 | test3
1       1       one
1       2       two
1       3       three
1       4       four
2       10      ten
2       11      eleven
2       12      twelve
3       101     one hundred one
3       104     one hundred four
3       107     one hundred seven

我试图找出将返回每个test1的top test3的select查询,其中的排序是基于test2中的值完成的。换句话说,我试图找到将返回此信息的查询:

test1 | test3
1       four
2       twelve
3       one hundred seven

如果该解决方案可以同时适用于MS SQL Server(2005和2008)以及MS Access(2007和2010),那真的很棒。

2 个答案:

答案 0 :(得分:2)

最低标准答案。

SELECT yourtable.test1, yourtable.test3
FROM yourtable
INNER JOIN
(
SELECT test1, MAX(test2) AS test_2
FROM yourtable
GROUP BY test1
) t
ON t.test1 =  yourtable.test1 AND t.test_2 =  yourtable.test2

答案 1 :(得分:1)

SQL Server

SELECT  test1, test3
FROM    (
        SELECT  test1, test3, ROW_NUMBER() OVER (PARTITION BY test1 ORDER BY test2 DESC) AS rn
        FROM    mytable
        ) q
WHERE   rn = 1

SELECT  test1, test3
FROM    (
        SELECT  DISTINCT test1
        FROM    mytable
        ) md
CROSS APPLY
        (
        SELECT  TOP 1
                test3
        FROM    mytable mi
        WHERE   mi.test1 = md.test1
        ORDER BY
                mi.test2 DESC
        ) mt

根据您的数据分布,这些方法中的每一种都可以比另一种方法更有效。

您可能会对此文章感兴趣: