【问题标题】:Help with Google App Engine query and datetime关于 Google App Engine 查询和日期时间的帮助
【发布时间】:2009-04-15 23:53:43
【问题描述】:

我使用以下数据:

date                     latitude         route      name   longitude
2009-04-11 00:50:31.640000  40.80708    White Loop  86  -77.85891
2009-04-11 00:50:27.718000  40.80708    White Loop  86  -77.85891
2009-04-11 00:50:01.562000  40.80708    White Loop  86  -77.85891
2009-04-11 00:49:48.765000  40.80708    White Loop  86  -77.85891
2009-04-11 00:49:34.796000  40.802338   White Loop  86  -77.85073
2009-04-11 00:49:22.468000  40.802338   White Loop  86  -77.85073
2009-04-11 00:48:35.671000  40.802338   White Loop  86  -77.85073
2009-04-11 00:48:29.125000  40.802338   White Loop  86  -77.85073
2009-04-11 00:47:19.906000  40.79889    White Loop  86  -77.85299
2009-04-11 00:47:03.609000  40.79889    White Loop  86  -77.85299
2009-04-11 00:46:54.437000  40.79889    White Loop  86  -77.85299
2009-04-11 00:46:52.687000  40.79889    White Loop  86  -77.85299
2009-04-11 00:46:51.125000  40.79889    White Loop  86  -77.85299
2009-04-11 00:46:48.578000  40.79889    White Loop  86  -77.85299
2009-04-11 00:46:41.406000  40.79889    White Loop  86  -77.85299
2009-04-11 00:50:31.687000  40.792194   White Loop  82  -77.863235
2009-04-11 00:50:27.781000  40.792194   White Loop  82  -77.863235
2009-04-11 00:50:01.640000  40.792194   White Loop  82  -77.863235
2009-04-11 00:49:48.812000  40.792194   White Loop  82  -77.863235
2009-04-11 00:49:34.843000  40.794914   White Loop  82  -77.866844
2009-04-11 00:49:22.531000  40.794914   White Loop  82  -77.866844
2009-04-11 00:48:35.718000  40.794914   White Loop  82  -77.866844
2009-04-11 00:48:29.156000  40.79738    White Loop  82  -77.86755
2009-04-11 00:47:19.984000  40.79738    White Loop  82  -77.86755
2009-04-11 00:47:03.656000  40.79738    White Loop  82  -77.86755
2009-04-11 00:46:54.484000  40.79738    White Loop  82  -77.86755
2009-04-11 00:46:52.734000  40.79738    White Loop  82  -77.86755
2009-04-11 00:46:51.156000  40.79738    White Loop  82  -77.86755
2009-04-11 00:46:48.640000  40.79738    White Loop  82  -77.86755
2009-04-11 00:46:41.453000  40.79738    White Loop  82  -77.86755
2009-04-11 00:50:31.656000  40.776066   White Loop  81  -77.88552
2009-04-11 00:50:27.750000  40.776066   White Loop  81  -77.88552
2009-04-11 00:50:01.593000  40.776066   White Loop  81  -77.88552
2009-04-11 00:49:48.796000  40.776066   White Loop  81  -77.88552
2009-04-11 00:49:34.812000  40.764687   White Loop  81  -77.88271
2009-04-11 00:49:22.515000  40.764687   White Loop  81  -77.88271
2009-04-11 00:48:35.703000  40.764687   White Loop  81  -77.88271
2009-04-11 00:48:29.140000  40.764687   White Loop  81  -77.88271
2009-04-11 00:47:19.937000  40.76335    White Loop  81  -77.876755
2009-04-11 00:47:03.640000  40.76335    White Loop  81  -77.876755
2009-04-11 00:46:54.468000  40.76335    White Loop  81  -77.876755
2009-04-11 00:46:52.718000  40.76335    White Loop  81  -77.876755
2009-04-11 00:46:51.156000  40.76335    White Loop  81  -77.876755
2009-04-11 00:46:48.609000  40.76335    White Loop  81  -77.876755
2009-04-11 00:46:41.437000  40.76335    White Loop  81  -77.876755

如何优化查询以仅获取每个“名称”的最新行?例如,我只想结束:

2009-04-11 00:50:31.640000  40.80708    White Loop  86  -77.85891
2009-04-11 00:50:31.687000  40.792194   White Loop  82  -77.863235
2009-04-11 00:50:31.656000  40.776066   White Loop  81  -77.88552

我希望所有结果的日期值不超过 1 分钟。请记住,日期值是 Python 日期时间属性。

谢谢

【问题讨论】:

    标签: google-app-engine datetime gql gqlquery


    【解决方案1】:

    在 SQL 中你可以做各种花哨的事情,但 Google API 相当有限。

    鉴于您希望所有记录的历史不超过 1 分钟,我只需向数据库询问不到 1 分钟的所有记录,然后让 python 整理结果并拒绝重复的行。

    从您在此处显示的数据来看,您似乎每分钟左右每个“名称”都会获得几行,因此即使它不优雅,这种方法也应该足够了。

    另一种方法是保留第二个表,其中仅包含每个“名称”的最新条目...并不时剔除该表以删除超过一分钟的记录。

    【讨论】:

      【解决方案2】:

      我想我找到了一个不错的解决方案。问题出在我的模型中:

      date = db.DateTimeProperty(auto_now_add=True)
      

      这意味着对于该模型的每个实例,日期时间都会略有不同。这使得对我的数据进行分组非常困难。所以在我的 cron 函数中,我确保每个 api 请求都有完全相同的时间戳。

      下一个更改是创建一个 Current 表。每次 cron 运行时,它都会删除当前表中的所有内容(仅一行),并添加一个新行。然后将这一新行添加到半永久存储结果的日志表中。

      【讨论】:

        【解决方案3】:

        这肯定行得通:

        query = db.GqlQuery("SELECT * FROM [table] ORDER BY date DESC LIMIT BY [num of rows]")
        

        或者,您可以使用不等式,例如“date > 2009-04-11 00:50”,它将返回该时间之后的所有结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-01
          • 2016-05-19
          • 1970-01-01
          • 2011-03-20
          • 1970-01-01
          • 2018-10-17
          • 2010-12-03
          相关资源
          最近更新 更多