Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Sql 不知道如何选择日期差最大的行的ID_Sql_Ms Access_Ms Access 2007 - Fatal编程技术网

Sql 不知道如何选择日期差最大的行的ID

Sql 不知道如何选择日期差最大的行的ID,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我正在尝试获取具有最大负日期差date的行-例如,现在从表中获取 类似于以下伪代码: SELECT ID, MAX( DateDiff("d", Now(), myDate) ) AS [test] FROM myTable WHERE test < 0; 我试图自己解决这个问题,但失败了。我甚至不知道如何在谷歌上表达搜索问题,所以互联网帮不了我。我只是被卡住了 注: 最大负数示例:介于-10和-125之间,结果应为-10 编辑: 我独自一人试一试,结果很接近: SELECT M

我正在尝试获取具有最大负日期差date的行-例如,现在从表中获取

类似于以下伪代码:

SELECT ID, MAX( DateDiff("d", Now(), myDate) ) AS [test] FROM myTable
    WHERE test < 0;
我试图自己解决这个问题,但失败了。我甚至不知道如何在谷歌上表达搜索问题,所以互联网帮不了我。我只是被卡住了

注:

最大负数示例:介于-10和-125之间,结果应为-10

编辑: 我独自一人试一试,结果很接近:

SELECT MAX( DateDiff("d", myDate, Now()) as [test] from myTable
    WHERE DateDiff("d", myDate, Now() < 0;
它返回正确的日期差,但当我尝试添加ID时,它返回所有行的日期差。我无法获取单个值。

使用ORDER BY和TOP 1。 像这样的

SELECT TOP 1 ID, myDate, DateDiff(Day, now(), myDate) AS [test]
FROM myTable
WHERE DateDiff(Day, now(), myDate) < 0
ORDER BY DateDiff(Day, now(), myDate) DESC -- min differenz
-- ORDER BY DateDiff(Day, now(), myDate) ASC -- max differenz
选择前1名 身份证件 DateDiff'd',现在,myDate为[测试] 从myTable 现在在哪里>我的日期 按2描述订购;
@汉瑟普:例如,给定-10和-15,您希望返回哪一个-10好的,你想为每个不同的ID计算这样一个最大值。。。对的如果是这样,您需要一个GROUP BY查询。@HansUp:否,我只需要具有最大负日期差的行的ID。我对其他行不感兴趣,只对最小值的行感兴趣。那么ID是myTable的主键吗?我不接受的唯一原因是他是第一个。向上投票。谢谢。请注意,您接受了一个带有DateDiff表达式的答案,该表达式在Access中无效。我试过他的问题,结果成功了。你能澄清一下吗?它的WHERE子句将强制进行全表扫描。这就是接受你的回答而不接受他的原因。我真的需要高性能的应用程序,我编码。谢谢你指出这一点。在我的测试中,一个带有DateDiffDay的查询,myDate要求我为一个名为Day的参数提供一个值。你没看到同样的事情吗?第一个DateDiff参数应该是字符串值;您需要“d”。其中Now>myDate可以使用myDate上的索引,因此db引擎可以有效地识别符合条件的行。其中DateDiffDay,now,myDate<0要求为表的每一行再次运行该函数,以确定哪些行符合条件,这意味着对表进行完整扫描。在我的测试中,一个带有DateDiffDay,now,myDate的查询要求我为名为Day的参数提供一个值。我把它换成了d,所以我完全没有领会你的意思。在我写帖子/测试答案的时候,已经是早上7点了,我还没睡,所以错过了。抢手货再次强调,绩效对我来说非常重要,这也是我接受你答案的原因。我为没有接受你的答案而道歉。我这样做的原因是其他答案为我提供了更高的性能,这对于我正在开发的应用程序来说非常关键。我再次道歉,请不要认为这对我不利。顺致敬意,
SELECT TOP 1 ID, myDate, DateDiff(Day, now(), myDate) AS [test]
FROM myTable
WHERE DateDiff(Day, now(), myDate) < 0
ORDER BY DateDiff(Day, now(), myDate) DESC -- min differenz
-- ORDER BY DateDiff(Day, now(), myDate) ASC -- max differenz