【问题标题】:Calculate DATEDIFF with IDs使用 ID 计算 DATEDIFF
【发布时间】:2019-10-09 16:26:59
【问题描述】:

我是一个 SQL 初学者,所以其他线程并没有真正帮助我。

我的数据库中有一个名为“任务”的表,其中存储了每个任务的 ID 和日期。我想要做的是计算每个条目之间的天数并将其呈现在另一列中。

我发现 DATEDIFF 函数最适合用于此。

id,name,campaign_id,real_date,hist_date,mission_status
1,"The Fall of France I",2,2013-12-08,"1940-05-11 11:00:00",2
2,"The Fall of France II",2,2013-12-15,"1940-05-15 15:30:00",2
3,"The Fall of France III",2,2013-12-22,"1940-05-21 15:30:00",2
4,"The Fall of France IV",2,2014-01-05,"1940-05-24 05:30:00",2
5,"The Fall of France V",2,2014-01-12,"1940-06-01 05:30:00",2
6,"The Fall of France VI",2,2014-01-19,"1940-06-12 13:10:00",2

我希望该表在第 1 列中列出任务的 ID,在第 2 列中列出其 hist_date 以及在第 3 列中以天为单位的每个日期条目之间的差异。 例如。

 id,hist_date,diff
    1,"1940-05-11 11:00:00",0
    2,"1940-05-15 15:30:00",4

【问题讨论】:

  • 你在使用 SQL Server 吗?
  • 哪个dbms??? SQL 只是多个 dbms 使用的一种语言。每个 dbms 都有自己的语法。如果人们给你错误的 dbms 解决方案,那是没有用的。
  • 是的,这是 SQL Server。不确定这是否相关,但我使用 MySQL Workbench 来访问它。
  • 看看我的回答!

标签: mysql datediff


【解决方案1】:

试试这个 (T-SQL)。即使您的 Id 列不连续(例如,如果一条记录被删除),它也可以工作。

SELECT A.Id, A.hist_date, ISNULL(DATEDIFF(Y, Max(B.hist_date), A.hist_date), 0) AS diff 
    FROM Mission AS A
    LEFT JOIN Mission AS B ON B.Id<A.id
    GROUP BY A.Id, A.hist_date

结果

Id  hist_date               diff
1   1940-05-11 11:00:00.000 0
2   1940-05-15 15:30:00.000 4
3   1940-05-21 15:30:00.000 6
4   1940-05-24 05:30:00.000 3
5   1940-06-01 05:30:00.000 8
6   1940-06-12 13:10:00.000 11

【讨论】:

  • 这至少有效。这几乎涵盖了它,即使由于某种原因它没有工作。错误代码:1582。调用本机函数“ISNULL”时的参数计数不正确
  • ISNULL 是 T-SQL 语法。如果您使用的是 MySQL,请尝试 IFNULL。
  • 对了,不过现在好像反对 DATEDIFF。
  • 在 MySQL 中,您必须从 DATEDIFF 参数列表中删除第一个参数 Y。
  • 谢谢哥们。那行得通。现在我怎么可能让表格只显示特定日期范围内的表格?
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多