【问题标题】:Don't know how to select ID of a row with maximal negative date difference不知道如何选择负日期差最大的行的 ID
【发布时间】:2015-02-20 05:56:24
【问题描述】:

我正在尝试从表中获取具有最大负日期差异的行(例如 date - Now())。

类似这样的东西(伪代码):

SELECT ID, MAX( DateDiff("d", Now(), myDate) ) AS [test] FROM myTable
    WHERE test < 0;

结果会是这样的:

ID | test
 1 |  -15

我试图自己解决这个问题,但失败了。我什至不知道如何在谷歌上搜索问题,所以互联网无法帮助我。我只是卡住了。

注意:

最大负数示例:-10 到 -125 之间,结果应为 -10。

编辑:

我自己尝试,我能够接近:

SELECT MAX( DateDiff("d", myDate, Now()) as [test] from myTable
    WHERE DateDiff("d", myDate, Now() < 0;

它返回正确的日期差异,但是当我尝试添加 ID 时,它返回所有行的日期差异。我无法获得单个值。

【问题讨论】:

  • @HansUp: 例如给定-10和-15,你要返回哪个? -10
  • 好的,您想为每个不同的ID 计算这样的Max 值……对吗?如果是这样,您需要一个GROUP BY 查询。
  • @HansUp:不,我只需要具有最大负日期差异的行的 ID。我对其他行不感兴趣,只对价值最小的行感兴趣。
  • 那么IDmyTable的主键吗?

标签: sql ms-access ms-access-2007


【解决方案1】:
SELECT TOP 1
    ID,
    DateDiff('d', Now(), myDate) AS [test]
FROM myTable
WHERE Now() > myDate
ORDER BY 2 DESC;

【讨论】:

  • 我不接受的唯一原因是他是第一个。赞成。谢谢。
  • 请注意,您接受了带有 DateDiff 表达式的答案,该表达式在 Access 中无效。 我已经尝试了他的查询并且它有效。你能澄清一下吗? 它的 WHERE 子句将强制进行全表扫描。 这就是接受你的答案而不接受他的答案的原因。我真的需要为我正在编码的应用程序提供高性能。谢谢你指出。最好的问候。
  • 在我的测试中,带有DateDiff(Day, now(), myDate) 的查询要求我为名为@9​​87654324@ 的参数提供一个值。你没有看到同样的事情吗?第一个DateDiff 参数应该是一个字符串值;你想要'd'
  • WHERE Now() &gt; myDate 可以利用myDate 上的索引,因此数据库引擎可以有效地识别符合条件的行。 WHERE DateDiff(Day, now(), myDate) &lt; 0 要求对表的每一行再次运行该函数,以识别哪些行符合条件 --- 这意味着全表扫描。
  • 在我的测试中,使用 DateDiff(Day, now(), myDate) 的查询要求我为名为 Day 的参数提供一个值。 我已将其替换为 @ 987654330@ 所以我完全错过了你的观点。在我写帖子/测试答案的时候是早上 7 点,我还没睡,所以我错过了。接得好。同样,性能对我来说非常重要,这就是我接受您的回答的原因。
【解决方案2】:

使用ORDER BYTOP 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

【讨论】:

  • 对于不接受您的回答,我深表歉意。我这样做的原因是其他答案为我提供了更高的性能,这对我正在开发的应用程序非常重要。再次向我道歉,请不要对我这么说。最好的问候。
猜你喜欢
  • 2012-04-11
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多