我被困在一个查询中,为每一个实体获得24行的查询中的最后一个条目。我已经阅读了this thred中的sollution相当类似的问题,但我无法将其纳入到我现有的查询中。在每天的多个条目中只获取最后一行
我现有的查询:
SELECT distinct b.Udc_id as EAN, sax.attrib_01, c.channel_no, a.local_read_time, a.read, a.Status
from register_reads a, lookup_mv_channels1 c, lookup_mv_sdps b
LEFT outer JOIN [email protected] sa
ON sa.x_udc_asset_id = b.Udc_id
LEFT outer JOIN [email protected] sax
ON sax.par_row_id = sa.row_id
WHERE c.Channel_id = a.channel_id
AND b.meter_id = c.meter_id
AND sax.attrib_02 = 'Y'
AND a.local_read_time >= (SYSDATE) - 1
order by b.Udc_id, a.local_read_time
从这个意愿,例如结果是:
||EAN | ATTRIB_01 | channel_no | LOCAL_READ_TIME | READ | STATUS||
||1234| ready | 1 |09/11/2015 01:00:01| 0| val ||
||1234| ready | 1 |09/11/2015 02:00:01| 10| val ||
||1234| ready | 1 | ... | ...| val ||
||1234| ready | 1 |09/11/2015 23:59:01| 60| val ||
||3456| ready | 1 |09/11/2015 01:00:01| 204| val ||
||3456| ready | 1 | ... | ...| val ||
||3456| ready | 1 |09/11/2015 23:58:01| 400| val ||
我想达到的结果是:反馈后
||EAN | ATTRIB_01 | channel_no | LOCAL_READ_TIME | READ | STATUS||
||1234| ready | 1 |09/11/2015 23:59:01| 60| val ||
||3456| ready | 1 |09/11/2015 23:58:01| 400| val ||
变化从@levelonehuman:
SELECT b.Udc_id as EAN,
c.physical_channel_no,
a.local_read_time,
a.cum_read,
a.validation_Status
FROM register_reads a, lookup_mv_channels1 c, lookup_mv_sdps b
INNER JOIN (SELECT b.Udc_id,
MAX(a.LOCAL_READ_TIME) AS LOCAL_READ_TIME
FROM register_reads, lookup_mv_sdps b
GROUP BY b.Udc_id) AS t2
ON b.Udc_id = t2.Udc_id AND b.LOCAL_READ_TIME = t2.LOCAL_READ_TIME
;
基于链接你使用SQL服务器? – Betlista
查询看起来不太好。您不应该将20世纪80年代使用的逗号分隔连接语法与最新的显式连接混合在一起,但只能使用后者。由于where子句中的条件使得它们仅仅是内连接,所以你有两个外连接不起作用。为什么你需要独特?对于register_read,可以找到同样的sax.attrib_01多重折叠,你必须消除这样的重复? –
请标记您的DBMS。 –