在access中使用sql每天的前X个结果
我试图每天获得前2个结果,其中前2个结果是MPR最高的行。我的桌子看起来像这样:在access中使用sql每天的前X个结果,sql,ms-access,Sql,Ms Access,我试图每天获得前2个结果,其中前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
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。我非常感谢您的帮助-
查看第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
)
类似于
SELECT DISTINCT(symbol), date, MAX(MPR)
FROM [TABLE]
GROUP BY date,symbol
应该这样做。。。或符号,在组中切换的日期 给你:
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中创建了一个快速DB,效果很好
编辑:此处说明MAX的用法。您返回的是组的最大值,而不是特定日期列的最大值。因此,您可以在每个日期获得2条正确的记录。如果不在此处运行SQL,我在帮助人们使用SQL方面的成功是有限的。所以我给你一个建议:在约会时不仅要有“top X”,还要有“group by”。我想。也可以看看这篇文章——虽然使用的语法不是MS Access,但它可以让你清楚地知道该怎么做。谢谢,DmitryK。我还没能让它发挥作用,但我会继续努力……不用担心。如果你愿意-将你目前所掌握的信息发布出来,我们可能会提供帮助…谢谢,DmitryK,这就是我在阅读了第5页的doc一词后得出的结论-注意:此查询运行速度非常慢。否,它将只返回最大MPR值1。Bobbyh需要返回2个值。对-详细信息-我在重读他的问题后删除了我的答案:。。但是你先评论了,所以我取消了删除。