我有一个包含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
我需要编写一个查询,给出子taskid456的min(datetime)和父jobid353的max(datetime),输出如下
Startime Endtime
2020-05-16 06:43:12.297 2020-05-16 06:50:11:112
这只是一天,即16日,同样,我需要一周的数据。我试着在同一张table上做一个连接
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子句不正确造成的问题,我还尝试了:
SELECT FORMAT(jbl.JobLogDateTime, 'yyyy-MM-dd') AS mainrundate,
child.starttime,
MAX(joblogdatetime) FROM JobLog jbl INNER JOIN
(
SELECT FORMAT(JobLogDateTime, 'yyyy-MM-dd') AS rundate, MIN(joblogdatetime)
AS Starttime FROM JobLog
WHERE TaskID=456
GROUP BY FORMAT(joblogdatetime, 'yyyy-MM-dd')
) child ON child.rundate=jbl.mainrundate
GROUP BY child.starttime, FORMAT(jbl.JobLogDateTime, 'yyyy-MM-dd')
ORDER BY FORMAT(jbl.JobLogDateTime, 'yyyy-MM-dd') desc
但是它说连接是不正确的
4条答案
按热度按时间z9smfwbn1#
试试这个
ubof19bj2#
我认为还需要在主查询中按jobid分组,然后在子查询中按字段添加group,t1.joblogdatetime是要聚合的字段,而不是要分组的字段,子查询中的情况也是一样,如果执行min(x),则不能按x进行group。尝试使用以下选项:
我还删除了't1.jobid=mt1.jobid'末尾的点,我认为这是一个打字错误
编辑:几个编辑。。我的第一篇文章和格式不是很好:)
pprl5pva3#
我可以通过如下更改查询来修复它:
11dmarpk4#