以下SPARQL查询所有欧洲国家(主权国家,Q3624078)的Wikidata,并为每个国家加载最近的几个已知人口数(P:1082人口):
SELECT DISTINCT ?item $itemLabel ?population ?popDate
WHERE {
?item wdt:P31 wd:Q3624078. #select only sovereign states
?item wdt:P706/wdt:P361*|wdt:P361*|wdt:P30 wd:Q46. #select items which are geographically in Europe
?item p:P31 ?statement.
?statement ps:P31 wd:Q3624078.
FILTER NOT EXISTS { ?statement pq:P582 ?end. } #filter out items which are not sovereign states anymore
FILTER NOT EXISTS { ?item wdt:P31 wd:Q3024240. } #filter out historical countries
OPTIONAL {
?item p:P1082 ?popStatement.
?popStatement ps:P1082 ?population;
pq:P585 ?popDate.
FILTER ( YEAR(?popDate) >= 2014 )
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ASC($itemLabel)
您可以here对其进行测试。
如何将人口数据限制为最新的人口数量?
我通过将其限制为特定年份(FILTER (YEAR(?popDate) = 2018
)进行了尝试,但这没有用,因为某些国家/地区没有对2018年的人口估计。
这类似于类似SELECT * FROM country c INNER JOIN population p ON p.CountryId = c.Id
的SQL查询。在SQL中,您需要使用MAX语句创建一个子查询,以按国家/地区查找最新的人口数据。如何在SPARQL中实现相同的目标?