我正在使用 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
我尝试 GROUP BY ?Startyear 并在代码的 SELECT 部分对 COUNT 求和,但我只是收到错误。