【问题标题】:Difference between dates in SQLDF in RR中SQLDF日期之间的差异
【发布时间】:2018-09-13 14:03:57
【问题描述】:

我正在使用 R 包 SQLDF,但无法找到两个日期时间变量之间的天数。变量ledger_entry_created_atcreated_at 是Unix Epochs,当我在转换为julianday 后尝试减去它们时,我返回NA 的向量。

我查看了this previous question 并没有发现它有用,因为我的答案是在 SQL 中给出的,原因超出了这个问题的范围。

如果有人能帮助我找出在 SQLDF 中执行此操作的方法,我将不胜感激。

编辑:

    SELECT strftime('%Y-%m-%d %H:%M:%S', l.created_at, 'unixepoch') ledger_entry_created_at, 
      l.ledger_entry_id, l.account_id, l.amount, a.user_id, u.created_at
  FROM ledger l
  LEFT JOIN accounts a
  ON l.account_id = a.account_id
  LEFT JOIN users u
  ON a.user_id = u.user_id

【问题讨论】:

  • 这些日期在我看来像常规文本时间戳/日期,不是 UNIX 纪元时间戳。
  • 请附上您用来查询的R代码。
  • 变量ledger_entry_created_at 是使用SQLDF 内部调用的以下代码创建的:strftime('%Y-%m-%d %H:%M:%S', l.created_at, 'unixepoch') ledger_entry_created_at。也许我误解了这会返回什么?
  • 如果您有两个 UNIX 时间戳,并且想要它们之间的天数,那么为什么不直接减去秒差并将其转换为天数呢?

标签: r datetime sqldf


【解决方案1】:

这个答案很简单,但是如果您已经有两个 UNIX 时间戳,并且您想知道它们之间已经过去了多少天,您可以简单地以秒为单位(它们的原始单位)取差,然后转换为天,例如

SELECT
    (l.created_at - u.created_at) / (3600*24) AS diff
    -- any maybe other columns here
FROM ledger l
LEFT JOIN accounts a
    ON l.account_id = a.account_id
LEFT JOIN users u
    ON a.user_id = u.user_id;

我不知道为什么您当前的方法会失败,因为您在屏幕截图中拥有的时间戳应该是 SQLite 的 julianday 函数的有效输入。但是,同样,您可能不需要如此复杂的路线来获得您想要的结果。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2011-02-01
    相关资源
    最近更新 更多