我正在尝试每天获得前2名结果,其中“最高”结果是具有最高“MPR”的行。我的表看起来像这样:
date symbol MPR
8/7/2008 AA 0.98
8/7/2008 AB 0.97
8/7/2008 AC 0.96
...
8/7/2008 AZ 0.50
8/8/2008 AA 0.88
8/8/2008 AB 0.87
8/8/2008 AC 0.86
...
8/8/2008 AZ 0.40
...
many other days
我希望结果集为:
date symbol MPR
8/7/2008 AA 0.98
8/7/2008 AB 0.97
8/8/2008 AA 0.88
8/8/2008 AB 0.87
我尝试过使用TOP关键字,但这只给了我前2行,而我正在尝试按日期进行前2行。
我正在使用Microsoft Access。我很感激任何帮助! : - )
答案 0 :(得分:1)
http://www.rogersaccesslibrary.com/forum/forum_posts.asp?TID=233
检查第5页
以下是解决方案:
SELECT t1.date, t1.symbol, t1.MPR
FROM table1 t1
WHERE t1.MPR IN
(
SELECT TOP 2 t2.MPR FROM table1 t2
WHERE
t2.date = t1.date
ORDER BY t2.MPR DESC
)
答案 1 :(得分:1)
你走了:
SELECT YourTable.DateStamp, YourTable.Symbol, Max(YourTable.MPR) AS MaxOfMBR FROM YourTable GROUP BY YourTable.DateStamp, YourTable.Symbol, YourTable.MPR HAVING YourTable.MPR In (SELECT TOP 2 MPR FROM YourTable T2 WHERE YourTable.DateStamp = T2.DateStamp ORDER BY MPR DESC) ORDER BY YourTable.DateStamp, YourTable.MPR DESC;
这里的技巧是使用聚合查询,然后在HAVING语句(基本上是聚合查询的“WHERE”)中,使用子查询从MPR列中提取前2个值。
我在Access 2007中创建了一个快速数据库,这很好。
编辑:这里澄清了MAX的用法。您将返回组的MAX,而不是特定日期的列的MAX值。因此,您可以获得每个日期的正确记录数(2)。答案 2 :(得分:0)
像...这样的东西。
SELECT DISTINCT(symbol), date, MAX(MPR)
FROM [TABLE]
GROUP BY date,symbol
应该这样做......或符号,在GROUP BY中切换日期。