【问题标题】:Having issues joing a table with a recursive function in Sqlite在 Sqlite 中加入具有递归函数的表时遇到问题
【发布时间】:2014-06-22 05:51:49
【问题描述】:

我正在构建一个复杂的查询,但我遇到了问题... 实际上,我从 sqlite 中的递归函数中检索日期范围:

WITH RECURSIVE dates(d)
AS (VALUES('2014-05-01')
    UNION ALL
    SELECT date(d, '+1 day')
    FROM dates
    WHERE d < '2014-05-5')
SELECT d AS date FROM dates

这是结果:

2014-05-01
2014-05-02
2014-05-03
2014-05-04
2014-05-05

我会在其他查询中加入这个查询,关于这个:

select date_column, column1, column2 from table

这是结果:

2014-05-03  column_value1  column_value2

最后,我想在输出中看到类似的结果(加入第一个查询和第二个查询的 date_column):

2014-05-01 |               |               |
2014-05-02 |               |               |
2014-05-03 | column_value1 | column_value2 |
2014-05-04 |               |               |
2014-05-05 |               |               |

我怎样才能得到这个结果?

谢谢!!!

【问题讨论】:

  • 建议始终有一个日期表。
  • with recrursive使用保留字作为伪表名吗?
  • @xQbert 是 sqlite 中的保留字
  • 那么改表名能消除错误吗?我不知道什么不起作用,所以我不确定在哪里看:D 除了将表(伪或其他)命名为保留字似乎很奇怪。

标签: sql sqlite date join union


【解决方案1】:

你为什么不干脆做这样的事情?

WITH RECURSIVE dates(d)
AS (VALUES('2014-05-01')
    UNION ALL
    SELECT date(d, '+1 day')
    FROM dates
    WHERE d < '2014-05-5')
SELECT 
    dates.d AS date 
    ,table.column1
    ,table.column2
FROM dates
    left join table
        ON strftime("%Y-%m-%d", table.date_column) = dates.date

也许您需要转换您的日期...

【讨论】:

  • 我必须使用 strftime("%Y-%m-%d", table.date_column) 吗?
  • 我现在无法真正知道,您必须确保日期 table.date_column = dates.date 的格式相同(文本或日期)。 table.date_column 我猜应该是日期格式,所以 NO。如果您需要一些具体的帮助,请给我们您的 sqllite 结构和使用 sqlfiddle 的示例,例如:sqlfiddle.com/#!7/cfeb2/1
  • table.date_column 是日期时间格式(例如:2014-05-05 00:00:00.000000)
  • 我的错,是的,你应该做类似ON strftime("%Y-%m-%d", table.date_column) = dates.date
  • 取决于很多事情,您的递归查询是一个好方法,尝试将其与我向您提出的查询合并。我将无法提供更多帮助。祝你好运;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2021-12-26
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多