DateTime列的总和

时间:2011-07-20 13:50:31

标签: tsql datetime

使用T-SQL,如何找到x个记录数量的DateTime值之和?

示例:

id(int) |  name(varchar) |  TimeInWomb(datetime)
---------------------------------------
 id1    |     name1      |     TiW1
 id2    |     name2      |     TiW2
 id3    |     name1      |     TiW3
 id4    |     name1      |     TiW4
  .     |       .        |      .
  .     |       .        |      .
  .     |       .        |      .

我想找到TimeInWomb的总和,其中name = name1。

感谢。

编辑:

我承认,事后来看,这是一个非常糟糕的例子,我现在已经改变了。 “sum”是指name = name1的所有值的小时/天/周/月的总和。

解答:

你无法总结日期时间。

2 个答案:

答案 0 :(得分:2)

我在您的编辑中注意到您将“出生日期”列更改为“子宫中的时间”。这是两个非常不同的概念。 “出生日期”是一个单一的时间点,“子宫内的时间”是一个时间的延迟。您试图表达这两个概念中的哪一个?

  • 如果你试图代表一个单一的时间点,那么做一个“总和”没有任何意义。你不能得到两个时间点的总和。
  • 如果您尝试表示持续时间,则不应使用DATETIME列。 DATETIME用于指代单个时间点。您应该有两个DATETIME列(开头和结尾),或者您应该有数字列(秒数或类似的东西)。

无论哪种方式在概念上都是错误的,我们无法给你答案,直到你把事情整理好。一些具有预期输出的样本数据将有很大帮助。

修改

由于您试图表示持续时间(子宫中的时间),因此您需要有两个DATETIME列(例如受孕时间和出生时间)或单个数字列(例如,子宫中的秒数)。第二个选项更容易使用,但第一个选项为您提供了更大的灵活性。

我们假设你有一个SecondsInWomb列是一个数字。你原来问题的答案是:

SELECT SUM(SecondsInWomb) FROM table WHERE name = 'name1'

这将告诉你在子宫中为该名称花费的总秒数。

答案 1 :(得分:1)

如果你只是设置相当于一个时间的例子,你可以使用SQL的默认值来完成你的目标:

总和(datediff(分钟,'1900-01-01 00:00:00',TimeInWomb)

如果您没有设置日期时间功能的一部分,您将获得其他部分的MS SQL默认值。 MS SQL默认值为1900-01-01 00:00:00。如果您只设置日期,则时间设置为00:00,如果设置时间,则日期变为1900-01-01。

我希望这会有所帮助。