【问题标题】:WITH RECURSIVE query with android roomWITH RECURSIVE 查询与 android 房间
【发布时间】:2019-08-29 07:02:31
【问题描述】:

需要从表格中获取最近 10 个日期的行,即使表格中缺少某些日期。

此查询可以正常获取日期,但问题是 android room dao 中的相同查询在 'SELECT x+1' x 处抛出编译错误无法解决。

@Query(WITH RECURSIVE
 stepDtailsTable(x) AS (
        SELECT 0
        UNION ALL
        SELECT x + 1 FROM stepDtailsTable
        LIMIT(SELECT((julianday('2019-03-20')-julianday('2019-03-01')))+1)
        )
        SELECT date(julianday('2019-03-01'),'+'||x||' days')as date FROM stepDtailsTable")
StepDetailsPojo getLastTenDayData();

【问题讨论】:

  • 为什么需要使用 RECURSIVE 来选择最后十个日期?如果您使用不同的查询,那么问题可能会消失。
  • 任何不同查询的提示?我对 sql 查询没有太多的 exp.. 并且要求从表中获取最近 10 天的数据,即使有些天数据不存在于表中,如果数据不存在我需要将值显示为 0..
  • 类似select * from stepDtailsTable order by thedatefield desc limit 10
  • 如果表中有日期为 1,2,3,6,8,11 的行.. 使用此查询,我们可以得到 6 行以 desc 顺序排列,但我需要缺少日期以及 10,9 ,8,7,6,5,4,3,2,1.. 这样对于缺少的日期,我可以在过去十天的图表中显示 0 个值..
  • 对不起,我误解了“失踪”。是的,recursive 在这种情况下很好。

标签: android sqlite android-room


【解决方案1】:

我注意到您使用常量作为朱利安日期,而您想从表中查询最近的 10 个日期。这是一个执行此操作的查询,它填补了从表中找到的最大日期到 10 天前的空白。我无法在您的平台上进行测试,因此它可能无法解决您遇到的编译器错误,可能是因为不支持 RECURSIVE。希望它能让你更进一步。

WITH RECURSIVE
 cte(x) AS (
    SELECT julianday(date(max(thedate))) from TheDataTable  
    UNION ALL
    SELECT x-1 FROM cte
    LIMIT 10
)
SELECT date(x) FROM cte

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2021-09-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多