【发布时间】:2020-04-25 03:11:54
【问题描述】:
我有一个 Microsoft Access 表,我想在其中返回一组记录,但仅限于最近的日期。
我的数据有 24 条记录,其中 12 条记录为 RECORD_DATE=#23/04/2020#,其他 12 条记录为 RECORD_DATE=#24/04/2020#(即 12 条记录在 4 月 23 日,12 条记录在 4 月 24 日);该字段设置为日期/时间。
我编写了一个子查询来获取每条记录的最大日期。
我遇到的问题是我的查询执行了,但返回了表中的所有记录(嗯,它正确应用了“WHERE Q.SITE_ID=?”),而不仅仅是那些具有 MAX(RECORD_DATE) 的记录。
这里是 SQL:
SELECT
Q.CONSUMABLE_RECORD_ID,
Q.SITE_ID,
Q.CONSUMABLE_STORAGE_ID,
Q.CONSUMABLE_PRODUCT_ID,
Q.CONSUMABLE_MEASUREMENT_UNIT_ID,
Q.RECORD_DATE,
Q.RECORD_VALUE,
Q.LAST_DATE,
Q.LAST_VALUE
FROM
CONSUMABLE_RECORD AS Q
WHERE
Q.SITE_ID =?
AND
Q.RECORD_DATE=
(
SELECT
MAX(S.RECORD_DATE)
FROM
CONSUMABLE_RECORD AS S
WHERE
Q.CONSUMABLE_RECORD_ID=S.CONSUMABLE_RECORD_ID
)
如果有任何区别,CONSUMABLE_RECORD_ID 是主键,我正在通过 C# 使用 OleDbCommand 执行查询,我使用的数据提供程序是 Microsoft.ACE.OLEDB.16.0。我也尝试在子查询中使用 MAX(CONSUMABLE_RECORD_ID),但这没有用 - 我更愿意将其保留为 Max(RECORD_DATE),因为理论上记录可以在日期上无序输入。
我需要做些什么才能使其正常工作?我在子查询中尝试了“TOP 1”,但仍然得到了 24 行。
我更愿意将其保留为子查询而不是内部联接等。
编辑:
这与This answer 不同。在那一个中,他们正在寻找一组中的前 3 个结果——我只想要最大记录。我尝试在问题的开头添加 TOP 1 和 ORDER BY(这需要 GROUP BY),但我仍然得到所有记录。
想要的结果就是 RECORD_DATE=#24/4/20# 的所有记录。
【问题讨论】:
-
这能回答你的问题吗? Top n records per group sql in access
-
部分问题可能是参数中的国际日期结构。评论allenbrowne.com/ser-36.html
-
我该如何解决这个问题?我没有将数据作为参数传递(无论如何在其他代码中使用 OleDbParameter 都可以正常工作)。我尝试了 max(CONSUMABLE_RECORD_ID) 应该可以工作(如果可以,将确认这是一个日期格式问题),但这不起作用。表明子查询结构有一些基本的东西。
-
编辑问题以显示示例数据和所需结果。