繁体   English   中英

如何从数据库表中获取列表最新条目以获取特定列的值列表? [复制]

[英]How to get the list latest entries from the database table for list of values for the specific column? [duplicate]

我有一个数据库表,其中有一个列主机名和一些其他列。 在主机名中,有许多具有相同主机名的行实例。

前任。 192.0.0.1 有 40 个条目,192.0.0.2 有 35 个条目,依此类推。

是否可以获得每个主机名的最新条目列表? 结果意味着我应该得到一个最新的 192.0.0.1 和一个最新的 192.0.0.2 等等。

我试过了

SELECT host,cluster,region,service 
  FROM system
 WHERE host IN ("171.33.64.158","171.33.64.159")  
 ORDER BY id DESC LIMIT 1; 

但 output 仅包含一行,这可能是整个结果的第一行。

有人可以帮我解决这个要求吗?

谢谢, 斯瓦普尼尔

尝试这个:

select host,cluster,region,service
from (
   SELECT host,cluster,region,service, row_number() over (partition by host order by id 
      desc) as r_num
   FROM system
   WHERE host IN ("171.33.64.158","171.33.64.159"))
where r_num = 1;

谢谢

为了正确订购,您需要将 IP 地址转换为十进制等效值。 我会建议像这样的 function :

FUNCTION IP2Decimal(IP IN VARCHAR2) RETURN NUMBER DETERMINISTIC IS
    DecimalIp NUMBER; 
BEGIN

   SELECT SUM(REGEXP_SUBSTR(IP, '\d+', 1, LEVEL) * POWER(256, 4-LEVEL))
   INTO DecimalIp
   FROM dual 
   CONNECT BY LEVEL <= 4;
   RETURN DecimalIp;    

END IP2Decimal;

那么您的查询可能是这样的:

SELECT hostname,
  FIRST_VALUE(host) OVER (ORDER BY IP2Decimal(host)),
  FIRST_VALUE(cluster) OVER (ORDER BY IP2Decimal(host)),
  FIRST_VALUE(region) OVER (ORDER BY IP2Decimal(host)),
  FIRST_VALUE(service) OVER (ORDER BY IP2Decimal(host))
FROM system
GROUP BY hostname;

暂无
暂无

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

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