Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在access中使用sql每天的前X个结果_Sql_Ms Access - Fatal编程技术网

在access中使用sql每天的前X个结果

在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

我试图每天获得前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  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个值。对-详细信息-我在重读他的问题后删除了我的答案:。。但是你先评论了,所以我取消了删除。