【问题标题】:Select records with unique created_at value in rails postgres在rails postgres中选择具有唯一created_at值的记录
【发布时间】:2014-05-23 01:14:25
【问题描述】:

时间戳以毫秒为单位,因此如果任何记录是通过自动化创建的,它们可能具有相同的秒值但不同的毫秒值。我需要这样做:

Version.uniq(:created_at)

但是,这不起作用,因为它们都是独一无二的。我如何使用 to_i 或其他任何可能的方法来实现这一点?

【问题讨论】:

  • 我已经在名为 created_at_int 的类方法中创建了。然后我尝试了这样的查询:Version.all.uniq(:created_at_int)。它没有出错......但它没有返回预期的结果。事实上......我可以输入任何字面作为符号并得到相同的结果。
  • 试试给Version.uniq(:created_at).to_time

标签: postgresql ruby-on-rails-4 uniq


【解决方案1】:

您需要date_trunc() PostgreSQL 函数:

SELECT DISTINCT date_trunc('second', created_at) FROM "version"

在红宝石中:

Version.select("date_trunc('second', created_at)").distinct

【讨论】:

    【解决方案2】:

    要摆脱小数秒,请转换为具有 0 个小数位的等效类型。

    SELECT DISTINCT created_at::timestamp(0) FROM "version"
    

    或者timestamptz,你没有透露你的确切类型。
    如需更具体的需求,请使用date_trunc()
    更多详情:
    Discard millisecond part from timestamp

    【讨论】:

    • @hellion:我不是 Ruby 导出,但它只是一个简单的转换(就像任何其他表达式一样)。也许您需要 SQL 标准表示法:cast(created_at AS timestamp(0)) ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多