2009-04-15 4 views
1

Я использую следующие данные:Помощь с Google App Engine запроса и DateTime

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.

Благодаря

ответ

1

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

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

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

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

1

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

date = db.DateTimeProperty(auto_now_add=True) 

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

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

1

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

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

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