繁体   English   中英

使用分组依据选择第二个到最后一个日期

[英]Select 2nd to last date with Group By

我有以下查询,希望能从第二个到最新日期获取数据

SELECT mn.meter_name, m.meter_number, m.meter_location, r.rates_meter_rate,
       r.rates_meter_PPD, m.meter_ID, mt.metertracking_readend,                        
       mt.metertracking_conversion, mt.metertracking_periodend 
FROM db_meters m, db_meters_name mn, db_rates_meter r, db_meters_tracking mt 
WHERE m.ICP_ID = '227' AND m.meter_name_ID = mn.meter_name_ID 
   AND r.meter_ID = m.meter_ID AND r.contract_ID = '70' AND mt.meter_ID = m.meter_ID   
   AND metertracking_periodend = ( 
      SELECT max(metertracking_periodend) 
      FROM db_meters_tracking 
      WHERE meter_ID = mt.meter_ID 
      AND metertracking_periodend < (SELECT MAX(metertracking_periodend) 
          FROM db_meters_tracking) 
     GROUP BY meter_ID ) 
ORDER BY  metertracking_periodend

输出以下内容:

meter_name  meter_number  meter_location   rates_meter_rate  rates_meter_PPD  meter_ID  metertracking_readend  metertracking_conversion  metertracking_periodend

Anytime     9011656:1     in front office  0.13870           10.000           15        73856                  0.0000                     2013-11-29
Anytime     9011656:2     in front office  0.13870           10.000           16        2899                   1.0000                     2013-11-29

但是,我期望以下几点:

meter_name  meter_number  meter_location   rates_meter_rate  rates_meter_PPD  meter_ID  metertracking_readend  metertracking_conversion  metertracking_periodend

Anytime     9011656:1     in front office  0.13870           10.000           15        0                      0.0000                     2013-10-31
Anytime     9011656:2     in front office  0.13870           10.000           16        0                      1.0000                     2013-10-31

我还附上了表格的屏幕截图 在此处输入图片说明

有什么想法我要去哪里吗? 或实际上是什么SQL查询才能完成此任务? 非常感谢。

我会这样重写查询(我尚未测试过,但我认为它是正确的):

SELECT mn.meter_name, m.meter_number, m.meter_location, r.rates_meter_rate,
       r.rates_meter_PPD, m.meter_ID, mt.metertracking_readend,                        
       mt.metertracking_conversion, mt.metertracking_periodend 
FROM db_meters m INNER JOIN db_meters_name mn ON m.meter_name_ID = mn.meter_name_ID
     INNER JOIN db_rates_meter r ON r.meter_ID = m.meter_ID 
     INNER JOIN db_meters_tracking mt ON mt.meter_ID = m.meter_ID
WHERE m.ICP_ID = '227' AND r.contract_ID = '70' 
AND 2 = (SELECT count(DISTINCT a.metertracking_periodend)
     FROM db_meters_tracking a 
     WHERE a.meter_ID = r.meter_ID AND mt.metertracking_periodend <= a.metertracking_periodend)
ORDER BY m.meter_ID, metertracking_periodend

请参阅此帖子以供参考。

另外,请在FROM子句中使用INNER JOINs而不是用逗号分隔的表。 现在被认为是标准

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM