TSQL最小和最大日期

问题描述 投票:0回答:3

我有一个带有列DateTime,JobID,TaskID的表

DateTime                 JobID            TaskID
2020-05-16 06:43:11.687   353              NULL
2020-05-16 06:45:11.687   353              123
2020-05-16 06:43:11.687   353              123
2020-05-16 06:43:12.297   353              456
2020-05-16 06:44:30.750   353              456
2020-05-16 06:44:30.750   353              456
2020-05-16 06:44:30.750   353              789
2020-05-16 06:45:05.000   353              789
2020-05-16 06:48:07.750   353              789
2020-05-16 06:49:01:110   353              011
2020-05-16 06:50:11:112   353              NULL

我需要编写查询,给我子任务ID 456的最小(日期时间)和父任务ID 353的最大(日期时间),输出看起来像]]

Startime                     Endtime
2020-05-16 06:43:12.297      2020-05-16 06:50:11:112

这仅适用于一天,即16日,同样,我需要一个星期的数据。我尝试在同一张桌子上进行联接

select 
mt1.Starttime, MAX(t1.JobLogDateTime) AS Endtime
from 
JobLog t1
inner join (
    SELECT jobid, MIN(JobLogDateTime) AS Starttime
    FROM JobLog WHERE taskid=456
    group by JobLogDateTime, jobid

) mt1
    on t1.JobID=mt1.jobid
    GROUP BY t1.JobLogDateTime

由于不正确的group by子句,这造成了问题

我有一个带有列DateTime,JobID,TaskID DateTime JobID TaskID的表2020-05-16 06:43:11.687 353 NULL 2020-05-16 06:45:11.687 353 123 ...

sql sql-server
3个回答
0
投票
SELECT min( datetime ) OVER ( task_id ) , max( datetime ) OVER ( task_id ) FROM X WHERE job_id = y

0
投票
尝试一下

0
投票
[我认为您还需要在主查询中按Jobid分组,然后通过子查询t1中的字段添加分组。JobLogDateTime是您要聚合的字段,而不是要分组的字段,在子查询中是同一件事,如果您执行MIN(X),您也无法按X组。尝试使用此:
© www.soinside.com 2019 - 2024. All rights reserved.