Sql 不知道如何选择日期差最大的行的ID
我正在尝试获取具有最大负日期差date的行-例如,现在从表中获取 类似于以下伪代码: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
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