【问题标题】:how to get latest timestamp from the two columns in django如何从 django 的两列中获取最新的时间戳
【发布时间】:2014-06-30 17:49:21
【问题描述】:

如何从两列获取最新时间,例如,我有两列名称 start_time_astart_time_b 都存储类似 2014-05-13 12:34:34 的值,但我需要使用 Python Django 从两列中获取最新时间。我是 django 查询的新手,请帮我解决这个问题。

示例表:

+-----+-----------------------+-----------------------+ 
|  id |    start_time_a       |    start_time_b       |
+-----+-----------------------+-----------------------+
|  1  |  2014-05-13 12:34:34  |  2014-05-13 12:41:34  |
|  2  |  2014-05-13 12:40:34  |  2014-05-13 12:40:40  |
|  3  |  2014-05-13 12:20:34  |  2014-05-13 12:46:34  | 
+-----+-----------------------+-----------------------+

我想要这个输出

|  3  |  2014-05-13 12:20:34  |  2014-05-13 12:46:34  | 

因为它具有来自所有时间戳的最新 start_time_b

【问题讨论】:

  • 您希望将两列中的最新列输出到一列中吗?
  • 我的表有两列 start_time_a 和 start_time_b 填充了许多记录,但我想从时间戳最新的多个记录中获取单个对象
  • 如果来自多条记录,你想比较和获取最晚的时间?最新的start_time_a 或最新的start_time_b
  • column1column2 比较所有记录的最新时间的单个对象
  • 我假设这背后有一个 django 模型。如果是这样:Model.objects.extra({"latest": "greatest(start_time_a, start_time_b)"}).order_by('latest')[0]

标签: python mysql django django-queryset


【解决方案1】:

参考SQL you posted,您可以将其放入Django extra() Queryset modifier

qs = YourModel.objects.extra(select={
    'max_time': '''
    select * from t where (
        start_time_a in (
            select greatest(max(start_time_a), max(start_time_b)) from t
        ) or start_time_b in (
            select greatest(max(start_time_a), max(start_time_b)) from t
        )
    )'''
})

# each YourModel object in the queryset will have an extra attribute, max_time
for obj in qs:
    print obj.max_time

【讨论】:

    【解决方案2】:

    为了从两列中获取最大价值的行,我找到了这个答案,它非常有用

    select * from t where (
                          start_time_a in (select greatest(max(start_time_a), max(start_time_b)) from t) or
                          start_time_b in (select greatest(max(start_time_a), max(start_time_b)) from t)
                          );
    

    mysqlgreatest()函数

    【讨论】:

      【解决方案3】:

      MySQL解决方案

      如果您想从所有记录中识别最新日期,而不考虑其他列值,您可以在日期列上使用MAX 函数。

      示例

      select max( start_time_a ) as mx_start_time_a
             , max( start_time_b ) as mx_start_time_b
      from table_name
      

      【讨论】:

      • 谢谢,但我想从多条记录中获取最新的两个时间戳
      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2022-12-09
      • 2023-02-24
      相关资源
      最近更新 更多