
[英]How to get latest Date AND TotalEnrollments from a list with Duplicated values
[英]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.