Mysql 按最高/最大值分组并计算差异
这是针对Oracle server上的数据运行的MYSQL/SQL。我有一个存储数据的SQL表,如下所示:Mysql 按最高/最大值分组并计算差异,mysql,sql,group-by,max,sql-function,Mysql,Sql,Group By,Max,Sql Function,这是针对Oracle server上的数据运行的MYSQL/SQL。我有一个存储数据的SQL表,如下所示: {IMPORTID Created IMPORTREQUESTID STARTDATE ENDDATE 1156 04/21/2017 (12 AM) 63833 4/23/2017 18:18 4/23/2017 18:19 1156 04/21/2017 (12 AM) 63833 4/23/201
{IMPORTID Created IMPORTREQUESTID STARTDATE ENDDATE
1156 04/21/2017 (12 AM) 63833 4/23/2017 18:18 4/23/2017 18:19
1156 04/21/2017 (12 AM) 63833 4/23/2017 18:18 4/23/2017 18:18
1156 04/21/2017 (12 AM) 63832 4/23/2017 17:56 4/23/2017 17:57
1156 04/21/2017 (12 AM) 63832 4/23/2017 17:56 4/23/2017 17:57
1156 04/21/2017 (12 AM) 63832 4/23/2017 17:56 4/23/2017 17:57}
我希望查询遍历该表,找到任何给定IMPORTID的最高或最大IMPORTREQUESTID和最大ENDDATE。然后,在找到包含最大值的行后,计算任何给定IMPORTID的CREATED和max(ENDDATE)之间的差值。同样,我只希望将max IMPORTREQUESTID和ENDDATE绑定到给定的IMPORTID。(一个IMPORTID将有多行具有不同的importRequestId)
因此,对于上面的给定数据,我的查询应该只返回1行,如下所示:
{IMPORTID Created IMPORTREQUESTID STARTDATE ENDDATE DIFF
1156 04/21/2017 12 AM 63833 4/23/2017 18:18 4/23/2017 18:19 **6:19**}
因此,在本例中,它发现IMPORTREQUESTID 63833是最高值,然后enddate 18:19是最高时间。然后它选择该行并计算创建日期和结束日期之间的差异
以下是我到目前为止的疑问:
SELECT ImportID
,A.created
,IMPORTSTATUS
,IMPORTCANONICALTYPE
, to_char(StartDate,'MM/DD/YYYY HH24:MI') StartDate
, to_char(EndDate,'MM/DD/YYYY HH24:MI') EndDate
, ((A.created-A.Enddate)*60*24) as MinDiff
, ImportRequestID
FROM (SELECT DISTINCT importrequestpartdone.ImportID
,importrequestpartdone.IMPORTCANONICALTYPE
,importrequestpartdone.IMPORTSTATUS
,importrequestpartdone.ImportRequestID
, importrequestpartdone.StartDate
, importrequestpartdone.EndDate
,import.created
From import,baywatchnosnap.importrequestpartdone@db1
where contextid=10114
and import.id=importrequestpartdone.importid
and importrequestpartdone.importstatus='2I') A
这将返回所有行。我只想要上面指出的最大值。因此,每个IMPORTID应该只返回一行 尽管我不明白你是如何得出6:19的差距的,因为差距只有1分钟 但是试试这个:-
SELECT importrequestpartdone.ImportID
,import.created
,importrequestpartdone.IMPORTSTATUS
,importrequestpartdone.IMPORTCANONICALTYPE
, to_char(StartDate,'MM/DD/YYYY HH24:MI') StartDate
, to_char(EndDate,'MM/DD/YYYY HH24:MI') EndDate
, ((A.created-A.Enddate)*60*24) as MinDiff
, importrequestpartdone.ImportRequestID
FROM baywatchnosnap.importrequestpartdone@db1
inner join
(SELECT importrequestpartdone.ImportID
,max(importrequestpartdone.ImportRequestID) as max_req_id
, max(importrequestpartdone.EndDate) as max_end
From import,baywatchnosnap.importrequestpartdone@db1
where contextid=10114
and import.id=importrequestpartdone.importid
and importrequestpartdone.importstatus='2I'
group by importrequestpartdone.ImportID ) A
on a.ImportID=importrequestpartdone.ImportID and a.max_req_id=importrequestpartdone.ImportRequestID
and a.max_end=importrequestpartdone.EndDate
inner join
import
on import.id=importrequestpartdone.importid
where contextid=10114
and importrequestpartdone.importstatus='2I';
你能解释一下你是如何得出样本数据的
6:19
差异的吗?我们是否应该忽略StartDate
、EndDate
的时间成分,或者两者都忽略?一个较小的ImportRequestID
是否可以有一个较新的EndDate
,或者反之亦然?请看我不懂“针对oracle server运行MySQL”。。。这种日期格式的东西真是荒谬