关于AnzoGraph教程中SPARQL查询的两个技术疑问
AnzoGraph教程相关问题解答
1. ORDER BY中desc的作用与使用场景
- desc是SPARQL标准语法,用于指定降序排序,对应默认的升序排序(可省略
asc关键字)。 - 核心作用:让查询结果按照指定变量的值从大到小排列——数值型变量从高到低,日期型变量从最新到最旧。
- 常见使用场景:
- 统计类查询中,按销售额、数量等指标从高到低排序,比如
ORDER BY desc(?sum); - 时间维度查询中,优先展示最新记录,比如你查询里的
ORDER BY desc(?selldate)就是按销售日期从新到旧排序。
- 统计类查询中,按销售额、数量等指标从高到低排序,比如
2. 日期差输出整数的解决方法
你看到的P1DT1H50M是ISO 8601标准的时长格式,其中P代表周期,D是天,T分隔日期与时间部分,H为小时,M为分钟。要得到整数形式的时间差,可通过AnzoGraph内置函数转换:
方法1:直接获取统一单位的整数差值
使用DAYSDIFF、HOURSDIFF或MINUTEDIFF函数,直接计算两个日期之间的整数差:
SELECT ?location ?kind ?name ?list_date (DAYSDIFF(?selldate, ?list_date) as ?sale_age_days) FROM <tickit> WHERE { ?sale <saletime> ?selldate . ?sale <eventid> ?event . ?listing <eventid> ?event . ?listing <listtime> ?list_date . ?event <eventname> ?name . ?event <venueid> ?venue . ?event <catid> ?cat . ?cat <catname> ?kind . ?venue <venuename> ?location . } ORDER BY desc(?selldate) desc(?list_date) ?location ?kind ?name
DAYSDIFF返回总天数整数,替换为HOURSDIFF可得到总小时数,MINUTEDIFF则返回总分钟数。
方法2:自定义计算总时长整数
如果需要更灵活的单位转换,可从默认时长结果中提取各部分并换算为统一单位:
SELECT ?location ?kind ?name ?list_date (EXTRACT(DAYS FROM (?selldate - ?list_date))*1440 + EXTRACT(HOURS FROM (?selldate - ?list_date))*60 + EXTRACT(MINUTES FROM (?selldate - ?list_date)) as ?sale_age_total_minutes) FROM <tickit> WHERE { ?sale <saletime> ?selldate . ?sale <eventid> ?event . ?listing <eventid> ?event . ?listing <listtime> ?list_date . ?event <eventname> ?name . ?event <venueid> ?venue . ?event <catid> ?cat . ?cat <catname> ?kind . ?venue <venuename> ?location . } ORDER BY desc(?selldate) desc(?list_date) ?location ?kind ?name
该计算会将天、小时统一转换为分钟,得到总分钟数的整数结果。
内容的提问来源于stack exchange,提问作者Michael DeBellis
相关产品推荐
相关产品推荐

