SPARQL 聚合函数 SUM 与 GROUP BY 错误

问题描述 投票:0回答:0

我正在使用 Druid 上的 SPARQL 描述 ANDB 数据库(荷兰钻石工人通用数据库)成员资格的数据库,这是历史数据的三重存储。我想使用会员卡上的开始日期显示每种性别随时间变化的会员资格。在我的尝试中,随着时间的推移,我能够显示每天的一般会员资格。但是我每年都做不到。

使用一些过滤器和 Year 函数,我能够将日期转换为年份,每年留下多行。我需要将这些加在一起以获得每一年的一行,每一年现在每一年的行的总和。但我没有成功。

我什至还没有能够考虑性别/性别,我猜当时是一个问题。

到目前为止,我进行了以下 SPARQL 查询,每年显示多次计数。

PREFIX xsd: <http://w3.org/2001/XMLSchema#> 
PREFIX time: <http://w3.org/2006/time#> 
PREFIX schema: <https://schema.org> 
PREFIX rdf: <http://w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://w3.org/2000/01/rdf-schema#> 
PREFIX vocab: <https://iisg.amsterdam/vocab/adb-andb> 
PREFIX org: <http://w3.org/ns/org#>

#selecting a count of starting memberships per day and converting xsd:date to a year
SELECT (YEAR(xsd:dateTime(?Startdate)) as ?Startyear) (COUNT(?People) as ?N)
WHERE {
  ?People rdf:type schema:Person;
          org:hasMembership/org:memberDuring/time:hasBeginning/time:inXSDDate ?Startdate;
#filters to make YEAR function work, some string dates in the database will not convert to xsd:dateTime as they do not exist as valid dates.
  FILTER(!REGEX(?Startdate, '\\d{4}-[0][0]-\\d\\d'))
  FILTER(!REGEX(?Startdate, '\\d{4}-\\d\\d-[0][0]'))
  FILTER(!REGEX(?Startdate, "0000"))
  FILTER(!REGEX(?Startdate, "04-31"))
}
ORDER BY ?Startyear

这里是结果的先睹为快: Result of query

我尝试 GROUP BY ?Startyear 并在代码的 SELECT 部分对 COUNT 求和,但我只是收到错误。

datetime group-by sum aggregate sparql
© www.soinside.com 2019 - 2024. All rights reserved.