Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 是否有按月份和行数计算无重叠总和的函数?_Sql Server - Fatal编程技术网

Sql server 是否有按月份和行数计算无重叠总和的函数?

Sql server 是否有按月份和行数计算无重叠总和的函数?,sql-server,Sql Server,你能帮帮我吗。 我有一个带有pkid、linNum、dateStart、dateStop、month的表。 我需要以不重叠的方式,按dateMonth上的lineNum对时间求和。 第10个月和第11个月的lineNum 1,2是多少 pkid lineNum dateStart dateStop dateMonth 1 1 2019-11-06 13:07:21.400 2019-

你能帮帮我吗。 我有一个带有pkid、linNum、dateStart、dateStop、month的表。 我需要以不重叠的方式,按dateMonth上的lineNum对时间求和。 第10个月和第11个月的lineNum 1,2是多少

pkid  lineNum          dateStart                dateStop              dateMonth

1        1        2019-11-06 13:07:21.400     2019-11-06 14:07:21.400    2019-10-01

2        1        019-11-06 14:07:21.400     2019-11-06 18:07:21.400    2019-10-01

3        1        2019-11-06 11:07:21.400     2019-11-06 11:27:21.400    2019-10-01

4        1        2019-11-06 14:07:21.400     2019-11-06 19:07:21.400    2019-10-01

5        2        2019-11-06 10:07:21.400     2019-11-06 17:07:21.400    2019-10-01

6        2        2019-11-06 09:07:21.400     2019-11-06 17:07:21.400    2019-10-01

7        2        2019-11-06 07:07:21.400     2019-11-06 17:07:21.400    2019-10-01

8        1        2019-11-06 11:07:21.400     2019-11-06 17:07:21.400    2019-11-01

9        1        2019-11-06 17:07:21.400     2019-11-06 22:07:21.400    2019-11-01

10       1        2019-11-06 19:07:21.400     2019-11-06 23:07:21.400    2019-11-01

15       1        2019-11-06 19:07:21.400     2019-11-06 23:07:21.400    2019-11-02

您应该使用
分组依据
进行
求和

这将为您提供2019-10-01的
10

也就是说。。您应该使用
DATETIME
作为字段,并使用
YYYY-MM-DD HH:MM:SS等格式作为其他字段,然后您可以在
WHERE
子句中使用
MONTH
等术语--

更进一步。。你可以选择月份和年份


下面是一个关于在SQL Server中使用日期的简单示例

您可以尝试以下代码。它将在
CTE
中计算DateStart和DateStop之间的差值(以分钟为单位),然后在下一次查询中使用
GROUP BY

DECLARE @MYTABLE TABLE( pkid int, lineitem int, dateStart Datetime, dateStop Datetime, dateMonth Date)

INSERT INTO @MYTABLE (pkid, lineitem, dateStart, DateStop, dateMonth)
values(1, 1, '2019-11-06 13:07:21.400', '2019-11-06 14:07:21.400', '2019-10-01'),
(2, 1, '2019-11-06 14:07:21.400', '2019-11-06 18:07:21.400', '2019-10-01'),
(3, 1, '2019-11-06 11:07:21.400', '2019-11-06 11:27:21.400', '2019-10-01'),
(4, 1, '2019-11-06 14:07:21.400', '2019-11-06 19:07:21.400', '2019-10-01'),
(5, 2, '2019-11-06 10:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(6, 2, '2019-11-06 09:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(7, 2, '2019-11-06 07:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(8, 1, '2019-11-06 11:07:21.400', '2019-11-06 17:07:21.400', '2019-11-01'),
(9, 1, '2019-11-06 17:07:21.400', '2019-11-06 22:07:21.400', '2019-11-01'),
(10, 1,'2019-11-06 19:07:21.400', '2019-11-06 23:07:21.400', '2019-11-01'),
(15, 1,'2019-11-06 19:07:21.400', '2019-11-06 23:07:21.400', '2019-11-02');


WITH CTE AS (
SELECT LINEITEM,
       DATEDIFF(MINUTE, DATESTART, DATESTOP) AS TIMEDIFF,
       DATEPART(MONTH, DATEMONTH) AS DATEMONTH
FROM @MYTABLE
)
SELECT LINEITEM,
       SUM(TIMEDIFF) AS TIMEDIFF,
       DATEMONTH
FROM CTE
GROUP BY LINEITEM, DATEMONTH
结果

LINEITEM   TIMEDIFF   DATEMONTH
1           620          10
2           1500         10
1           1140         11

“总和时间”指的是以小时、分钟或天为单位的最大日期和最小日期之间的差异?时间之和是什么意思?Kelevra,是的,非重叠的小时之和。你们说的非重叠是什么意思?对不起,我解释错了,那个种方式只是把最大值和最小值相加。我需要从10月390分钟开始的行数1。从10月600分钟开始的行数2。600分钟代表什么?如果您需要分钟,则将小时更改为分钟从pkid 1到pkid 4,是的,小时更改为分钟您能否提供所需的结果,以便我能清楚地理解(1:07-2:07 60分钟2:07-18:07 240分钟11:07-11:27 30分钟2:07-19:07 300分钟10月的第1行总计为60+30+300=390分钟)(10:07-17:07 420分钟09:07-17:07 480分钟07:07-17:07 600分钟10月2号线总计600分钟)(11:07-12:07 60分钟17:07-22:07 300分钟19:07-23:07 240分钟15:07-22:07 420分钟11月1号线总计为60+480=540分钟)
SELECT SUM (lineNum) 
FROM table
WHERE MONTH(dateMonth) = '10'
AND YEAR(dateMonth) = '2019';
DECLARE @MYTABLE TABLE( pkid int, lineitem int, dateStart Datetime, dateStop Datetime, dateMonth Date)

INSERT INTO @MYTABLE (pkid, lineitem, dateStart, DateStop, dateMonth)
values(1, 1, '2019-11-06 13:07:21.400', '2019-11-06 14:07:21.400', '2019-10-01'),
(2, 1, '2019-11-06 14:07:21.400', '2019-11-06 18:07:21.400', '2019-10-01'),
(3, 1, '2019-11-06 11:07:21.400', '2019-11-06 11:27:21.400', '2019-10-01'),
(4, 1, '2019-11-06 14:07:21.400', '2019-11-06 19:07:21.400', '2019-10-01'),
(5, 2, '2019-11-06 10:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(6, 2, '2019-11-06 09:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(7, 2, '2019-11-06 07:07:21.400', '2019-11-06 17:07:21.400', '2019-10-01'),
(8, 1, '2019-11-06 11:07:21.400', '2019-11-06 17:07:21.400', '2019-11-01'),
(9, 1, '2019-11-06 17:07:21.400', '2019-11-06 22:07:21.400', '2019-11-01'),
(10, 1,'2019-11-06 19:07:21.400', '2019-11-06 23:07:21.400', '2019-11-01'),
(15, 1,'2019-11-06 19:07:21.400', '2019-11-06 23:07:21.400', '2019-11-02');


WITH CTE AS (
SELECT LINEITEM,
       DATEDIFF(MINUTE, DATESTART, DATESTOP) AS TIMEDIFF,
       DATEPART(MONTH, DATEMONTH) AS DATEMONTH
FROM @MYTABLE
)
SELECT LINEITEM,
       SUM(TIMEDIFF) AS TIMEDIFF,
       DATEMONTH
FROM CTE
GROUP BY LINEITEM, DATEMONTH
LINEITEM   TIMEDIFF   DATEMONTH
1           620          10
2           1500         10
1           1140         11