如何使用SPARQL“将表A与表B连接”,并仅采用B中具有MAX值的行?

时间:2019-05-05 14:20:04

标签: sparql wikidata wikidata-api

以下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中实现相同的目标?

0 个答案:

没有答案