Select 每个特定变量仅当它具有最新的时间戳时
Select every specific variable only if it has the most recent timestamp
我有一个 table 看起来像这样-
ChangeKeyValue ChangeFieldName ChangeOldValue ChangeNewValue
106 OGCSTATUSID 20 10
106 OGCSTATUSID 10 20
106 DATALOADSTATUSID 10 20
106 DATAAMOUNTSTATUSID 10 20
106 OGCSTATUSID 20 10
106 DATALOADSTATUSID 20 10
106 DATAAMOUNTSTATUSID 20 10
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID 20 Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial Full
106 DATAAMOUNTSTATUSID 30 None
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID 20 Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID 20 Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID 20 None
106 OGCSTATUSID Not Yet Reviewed Rejected - Do Not Load
106 OGCSTATUSID Rejected - Do Not Load Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial None
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID Under Review Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial Quarantined - DSC
时间戳看起来像这样-
2016-03-01 11:03:01.703
2016-03-01 11:37:11.117
2016-03-01 11:37:27.933
2016-03-01 11:37:30.017
2016-03-01 11:37:40.837
2016-03-01 11:37:43.250
2016-03-01 11:37:45.890
2016-03-01 12:55:47.567
2016-03-01 12:56:42.347
2016-03-01 12:56:46.917
2016-03-01 12:56:51.413
2016-03-01 12:56:54.737
2016-03-01 12:57:01.293
2016-03-01 12:57:03.500
2016-03-01 12:59:39.487
2016-03-01 12:59:43.443
2016-03-01 12:59:47.840
2016-03-01 12:59:51.410
2016-03-01 12:59:55.147
2016-03-01 12:59:57.137
2016-03-01 13:03:10.350
2016-03-01 13:03:12.450
2016-03-01 13:03:15.677
2016-03-01 13:03:17.813
2016-03-01 13:03:21.067
2016-03-01 13:03:24.127
2016-03-01 14:24:46.523
2016-03-01 14:24:52.347
2016-03-01 14:24:56.480
2016-03-01 14:24:59.363
2016-03-01 14:25:02.777
2016-03-01 14:25:05.640
我想做的是 select ChangeNewValue
但前提是它是最近的时间戳。具体来说,只有当 ChangeNewValue
是 Quarantined - DSC
.
时,我才想 select 最近的时间戳
请注意,我正在使用(未成功)的QlikView代码如下-
Left keep
Table6:
Load
ChangeKeyValue as ITMSNumber,
IF(ChangeNewValue='Quarantined - DSC', date(Today()) - Floor(date(TIMESTAMP(ChangeDate, 'YYYY-MM-DD hh.mm.ss.fff'))));
SQL SELECT ChangeKeyValue,
ChangeNewValue,
ChangeDate
FROM MPL.dbo."tblCHANGE";
table 名字是 MPL.dbo."tblCHANGE"
我请求您在回答中使用我在此 post 中添加的标签,以免造成混淆。
SQL 服务器/Oracle:
with CTE as
(
select a1.*, row_number() over(partition by ChangeFieldName order by TimeStampField) as R_ORD
from MyTable a1
)
select *
from CTE
where R_ORD = 1
and ChangeNewValue = 'Quarantined - DSC'
MySQL:
select *
from
(
select ChangeFieldName, max(TimeStampField) as maxField
from MyTable
group by ChangeFieldName
) a1
inner join MyTable a2
on a1.ChangeFieldName = a2.ChangeFieldName
and a1.maxField = a2.TimeStampField
and a2.ChangeNewValue = 'Quarantined - DSC'
试试这个
SQL:
SQL SELECT ChangeKeyValue,
ChangeNewValue,
ChangeDate
FROM MPL.dbo."tblCHANGE";
left join (SQL)
Load max(ChangeDate) as Max_ChangeDate
resident SQL
where ChangeNewValue='Quarantined - DSC';
Table6:
Load
ChangeKeyValue as ITMSNumber,
date(Today()) - Floor(date(TIMESTAMP(ChangeDate, 'YYYY-MM-DD hh.mm.ss.fff')))
resident SQL
where ChangeDate=Max_ChangeDate and ChangeNewValue='Quarantined - DSC';
drop field Max_ChangeDate; drop table SQL;
为了减少代码,您也可以使用 inner join
或 right join
但这应该工作得很好
这就是为我做的。
SQL
SELECT ITMSNumber,Date_Chg,DATEDIFF(dd,Date_Chg,GETDATE()) AS tDays
FROM tblSTRATEGY Strgy
inner join
( SELECT ChangeKeyValue AS ITMS_Chg,MAX(ChangeDate) AS Date_Chg
FROM tblCHANGE Chg
WHERE ChangeFieldName='DATALOADSTATUSID'
AND ChangeNewValue='Quarantined - DSC'
GROUP BY ChangeKeyValue
) Chg1 ON Chg1.ITMS_Chg=Strgy.ITMSNumber
WHERE Strgy.DATALOADSTATUSID=30
ORDER BY TDAYS;
希望对您有所帮助。
我有一个 table 看起来像这样-
ChangeKeyValue ChangeFieldName ChangeOldValue ChangeNewValue
106 OGCSTATUSID 20 10
106 OGCSTATUSID 10 20
106 DATALOADSTATUSID 10 20
106 DATAAMOUNTSTATUSID 10 20
106 OGCSTATUSID 20 10
106 DATALOADSTATUSID 20 10
106 DATAAMOUNTSTATUSID 20 10
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID 20 Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial Full
106 DATAAMOUNTSTATUSID 30 None
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID 20 Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID 20 Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID 20 None
106 OGCSTATUSID Not Yet Reviewed Rejected - Do Not Load
106 OGCSTATUSID Rejected - Do Not Load Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial None
106 OGCSTATUSID Not Yet Reviewed Under Review
106 OGCSTATUSID Under Review Not Yet Reviewed
106 DATALOADSTATUSID Not Loaded Loaded - Outside DSC
106 DATALOADSTATUSID Loaded - Outside DSC Not Loaded
106 DATAAMOUNTSTATUSID None Partial
106 DATAAMOUNTSTATUSID Partial Quarantined - DSC
时间戳看起来像这样-
2016-03-01 11:03:01.703
2016-03-01 11:37:11.117
2016-03-01 11:37:27.933
2016-03-01 11:37:30.017
2016-03-01 11:37:40.837
2016-03-01 11:37:43.250
2016-03-01 11:37:45.890
2016-03-01 12:55:47.567
2016-03-01 12:56:42.347
2016-03-01 12:56:46.917
2016-03-01 12:56:51.413
2016-03-01 12:56:54.737
2016-03-01 12:57:01.293
2016-03-01 12:57:03.500
2016-03-01 12:59:39.487
2016-03-01 12:59:43.443
2016-03-01 12:59:47.840
2016-03-01 12:59:51.410
2016-03-01 12:59:55.147
2016-03-01 12:59:57.137
2016-03-01 13:03:10.350
2016-03-01 13:03:12.450
2016-03-01 13:03:15.677
2016-03-01 13:03:17.813
2016-03-01 13:03:21.067
2016-03-01 13:03:24.127
2016-03-01 14:24:46.523
2016-03-01 14:24:52.347
2016-03-01 14:24:56.480
2016-03-01 14:24:59.363
2016-03-01 14:25:02.777
2016-03-01 14:25:05.640
我想做的是 select ChangeNewValue
但前提是它是最近的时间戳。具体来说,只有当 ChangeNewValue
是 Quarantined - DSC
.
请注意,我正在使用(未成功)的QlikView代码如下-
Left keep
Table6:
Load
ChangeKeyValue as ITMSNumber,
IF(ChangeNewValue='Quarantined - DSC', date(Today()) - Floor(date(TIMESTAMP(ChangeDate, 'YYYY-MM-DD hh.mm.ss.fff'))));
SQL SELECT ChangeKeyValue,
ChangeNewValue,
ChangeDate
FROM MPL.dbo."tblCHANGE";
table 名字是 MPL.dbo."tblCHANGE"
我请求您在回答中使用我在此 post 中添加的标签,以免造成混淆。
SQL 服务器/Oracle:
with CTE as
(
select a1.*, row_number() over(partition by ChangeFieldName order by TimeStampField) as R_ORD
from MyTable a1
)
select *
from CTE
where R_ORD = 1
and ChangeNewValue = 'Quarantined - DSC'
MySQL:
select *
from
(
select ChangeFieldName, max(TimeStampField) as maxField
from MyTable
group by ChangeFieldName
) a1
inner join MyTable a2
on a1.ChangeFieldName = a2.ChangeFieldName
and a1.maxField = a2.TimeStampField
and a2.ChangeNewValue = 'Quarantined - DSC'
试试这个
SQL:
SQL SELECT ChangeKeyValue,
ChangeNewValue,
ChangeDate
FROM MPL.dbo."tblCHANGE";
left join (SQL)
Load max(ChangeDate) as Max_ChangeDate
resident SQL
where ChangeNewValue='Quarantined - DSC';
Table6:
Load
ChangeKeyValue as ITMSNumber,
date(Today()) - Floor(date(TIMESTAMP(ChangeDate, 'YYYY-MM-DD hh.mm.ss.fff')))
resident SQL
where ChangeDate=Max_ChangeDate and ChangeNewValue='Quarantined - DSC';
drop field Max_ChangeDate; drop table SQL;
为了减少代码,您也可以使用 inner join
或 right join
但这应该工作得很好
这就是为我做的。
SQL
SELECT ITMSNumber,Date_Chg,DATEDIFF(dd,Date_Chg,GETDATE()) AS tDays
FROM tblSTRATEGY Strgy
inner join
( SELECT ChangeKeyValue AS ITMS_Chg,MAX(ChangeDate) AS Date_Chg
FROM tblCHANGE Chg
WHERE ChangeFieldName='DATALOADSTATUSID'
AND ChangeNewValue='Quarantined - DSC'
GROUP BY ChangeKeyValue
) Chg1 ON Chg1.ITMS_Chg=Strgy.ITMSNumber
WHERE Strgy.DATALOADSTATUSID=30
ORDER BY TDAYS;
希望对您有所帮助。