帮助Google App Engine查询和日期时间

时间:2009-04-15 23:53:43

标签: google-app-engine datetime gql gqlquery

我使用以下数据:

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日期时间属性。

由于

3 个答案:

答案 0 :(得分:1)

在SQL中,您可以做各种奇特的事情,但Google API相当有限。

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

根据您在此处显示的数据,看起来您每分钟左右每个'名称'会得到几行,所以即使它不够优雅,这种方法应该足够了。

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

答案 1 :(得分:1)

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

date = db.DateTimeProperty(auto_now_add=True)

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

下一个更改是创建一个Current表。每次cron运行时,它都会删除Current表中的所有内容(只有一行),并添加一个新行。然后将此新行添加到Log表中,该表半永久性地存储结果。

答案 2 :(得分:1)

当然这会奏效:

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

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