我有这张桌子:
我想计算具有相同设备和最大值(DATE_RECEIPT)的WKF_NDI的数量。
我尝试:
select EQUIPMENT,DATE_RECEIPT,COUNT(WKF_NDI) from CMM_DB.REF_WKF_THEMIS_H323
where date_receipt in ( select max(date_receipt)from CMM_DB.REF_WKF_THEMIS_H323)
group by EQUIPMENT, DATE_RECEIPT;
结果:
输出只是一行。
我希望输出像这样:
PF2_SBAA-B 28/12/17 10:00:01,000000000 5
PF2_SBCC-D 27/12/17 16:50:01,000000000 5
请帮忙。
您的子查询只选择最大date-receipt
,因此您的主查询将只选择与该日期匹配的记录。您似乎想要为每件设备选择最长日期。
如果是这样,您需要相应地修改子查询:
select EQUIPMENT,DATE_RECEIPT,COUNT(WKF_NDI)
from CMM_DB.REF_WKF_THEMIS_H323
where (EQUIPMENT,date_receipt) in ( select EQUIPMENT, max(date_receipt)
from CMM_DB.REF_WKF_THEMIS_H323
group by EQUIPMENT)
group by EQUIPMENT, DATE_RECEIPT;
当你使用FIRST/LAST函数时,也可以不使用子查询(因此可能表现更好):
SELECT MAX(EQUIPMENT) KEEP (DENSE_RANK LAST ORDER BY DATE_RECEIPT) as EQUIPMENT,
MAX(DATE_RECEIPT),
COUNT(WKF_NDI) KEEP (DENSE_RANK LAST ORDER BY DATE_RECEIPT)
FROM REF_WKF_THEMIS_H323
GROUP BY EQUIPMENT;
计算由设备分区的最大日期,使用over子句将该值放在每一行上,因此它成为一个简单的where子句来选择与该日期匹配的行:
SELECT
EQUIPMENT
, DATE_RECEIPT
, COUNT(WKF_NDI)
FROM (
SELECT
EQUIPMENT
, DATE_RECEIPT
, MAX(date_receipt) OVER (PARTITION BY EQUIPMENT) max_date
FROM CMM_DB.REF_WKF_THEMIS_H323
) d
WHERE DATE_RECEIPT = max_date
GROUP BY
EQUIPMENT
, DATE_RECEIPT;