【问题标题】:Find the largest value of time找到最大的时间值
【发布时间】:2013-01-03 04:49:08
【问题描述】:

我正在寻找将从 mysql 返回的行中搜索最大时间值的脚本。 Mysql 返回的行如下:

(123, 'new', datetime.datetime(2013, 1, 2, 16, 6, 21))
(122, 'old', datetime.datetime(2012, 12, 3, 18, 08, 36))
(125, 'new', datetime.datetime(2012, 12, 13, 20, 18, 16))

我试过了:

value = 0
for row in rows:
  if row[2] > value:
    value = row
print value

如果我们打印将显示的 row[2] 值

for row in rows:
 print row[2]

output: 2013-01-02 16:06:21
        2012-12-03 18:08:36
        2013-12-13 20:18:16

【问题讨论】:

  • 这个问题表明你对SQL一无所知,否则你会知道SORT和LIMIT。

标签: python datetime python-2.6


【解决方案1】:

Anders Johansson 巧妙地回答了您的问题。

不过,您也可以避免一开始就在 Python 中执行此操作,只需请求该行数据即可。类似的 SQL 语句:

SELECT DateTime FROM MyTable
ORDER BY CASE WHEN Status IS 'new' THEN 1 ELSE 0 END DESC, DateTime DESC LIMIT 1;

会实现你想要做的事情,并且只给你一个数据点。

更新:

SELECT mydate FROM MyTable
WHERE type=4
ORDER BY FIELD(status, 'new', 'waited', 'old'), mydate DESC
LIMIT 1;

SQLFiddle

【讨论】:

  • 实际上我想以这样的方式获取值,如果状态 = 新然后找到最大日期值并返回一行,如果状态不是新的,则取旧并找到最新日期并打印行。
  • @Surya 使用 SQL 语句效果更好,请参阅更新。另外,你真的应该接受一些答案。
  • 你的回答对我真的很有帮助.. 非常感谢.. 但有时状态不仅是新的或旧的,它也可以“等待”。首先我想搜索 status=new 并根据最新日期选择行,如果 status 不是 new 然后去 status=waited 并搜索最新日期,如果 waited 也不存在然后去 status=old 搜索最新日期并返回一行
  • 那你为什么不一开始就写这个呢?这段代码也这样做;都是相同的自定义排序概念。
  • 我喜欢这样:SELECT mydate FROM MyTable WHERE FIELD(status, 'new', 'waited', 'old') and type=4 ORDER BY mydate DESC LIMIT 1;
【解决方案2】:

你可以简单地使用:

print max(x[2] for x in rows)

【讨论】:

  • 上述情况如何打印最大时间值
  • 接受答案 - 否则没有人有兴趣帮助您。
猜你喜欢
  • 2013-09-12
  • 2012-06-21
  • 1970-01-01
  • 2018-08-22
  • 2015-03-28
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多