Помогите с запросом Google App Engine и датой и временем - PullRequest
1 голос
/ 16 апреля 2009

Я использую следующие данные:

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 ]

1 голос
/ 16 апреля 2009

Думаю, я нашел приличное решение. Проблема была в моей модели:

date = db.DateTimeProperty(auto_now_add=True)

Это означало, что для каждого экземпляра этой модели время и дата будут немного отличаться. Это делает группирование моих данных очень трудным. Поэтому в своей функции cron я удостоверился, что каждый запрос API имеет одинаковую отметку времени.

Следующим изменением было создание таблицы Current. Каждый раз, когда запускается cron, он удаляет все в текущей таблице (только одну строку) и добавляет новую строку. Затем эта новая строка добавляется в таблицу журнала, в которой полупостоянно хранятся результаты.

1 голос
/ 21 июня 2009

Конечно, это будет работать:

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

В качестве альтернативы вы можете использовать неравенство, например «date> 2009-04-11 00:50», которое будет возвращать все результаты после этого времени.

1 голос
/ 16 апреля 2009

В SQL вы можете делать все что угодно, но Google API довольно ограничен.

Учитывая, что вы хотите, чтобы все записи были не старше 1 минуты, я просто запросил бы в базе данных все записи, которые были менее 1 минуты, а затем попросил python сопоставить результаты и отклонить дублирующиеся строки.

Из данных, которые вы показываете здесь, похоже, что вы получаете пару строк на «имя» в минуту или около того, поэтому такой подход должен быть достаточным, даже если он неэлегатный.

Альтернативой может быть сохранение второй таблицы с только самой последней записью для каждого «имени» в ней ... и время от времени отбирать эту таблицу для удаления записей старше минуты.

...