很抱歉,标题很难理解 - 我不太清楚如何描述我想做的事情。假设我有这张桌子。 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),那真的很棒。
答案 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
根据您的数据分布,这些方法中的每一种都可以比另一种方法更有效。
您可能会对此文章感兴趣: