Выбор максимального значения поля

0 голосов
спросил 26 Июль, 10 от JGBoBBy (4,940 баллов) в категории Программные продукты Esri
Здравствуйте!

Есть атрибутивная таблица table с полем date_ типа DATE. Нужно сделать Select by attributes, чтобы в таблице выбрались записи с максимальным значением в поле date_. В 10ке прокатывает такой вариант запроса: "date_" = (SELECT MAX("date_") FROM table)

В 9ке такой запрос не работает.

Собственно, как можно выбрать запросом из таблицы максимальное значение какого то поля?

PS Этот запрос потом будет использоваться в инструменте Table Select в скрипте Python.

Спасибо

6 Ответы

0 голосов
ответил 26 Июль, 10 от TDenis (42,620 баллов)
А таблица где хранится?
С SDE на 9-ке такое тоже работает. А вот с шейп-файлами не хочет.
Наверное придётся делать в два прохода.
0 голосов
ответил 26 Июль, 10 от JGBoBBy (4,940 баллов)
Таблица хранится в файловой БГД (или в персональной, это не принципиально). А в два подхода это как?
Кстати, имеет значение для синтаксиса в какой СУБД лежит таблица, если таки сде? Например sql и postgres?    
    
0 голосов
ответил 26 Июль, 10 от Grigoriy (127,020 баллов)
Прекрасно работает в 9.3 и для файловой базы:
"Datastart" = (SELECT MAX ( "Datastart" ) from table_with_Datastart)

и для персональной:
[Datastart] = (SELECT MAX( [Datastart] ) from table_with_Datastart)

При условии, что нет связанных таблиц или Join'ов.
Но как видишь синтаксис отличается.

Т.е. полный запрос к базе выглядит так:
SELECT * from table_with_Datastart where "Datastart" = (SELECT MAX ( "Datastart" ) from table_with_Datastart)
Или:
SELECT * from table_with_Datastart where [Datastart] = (SELECT MAX ( [Datastart] ) from table_with_Datastart)

Для SQL Server и Postgres в общем случае тоже будут отличия, но не в этом запросе.
Подзапрос MAX работает в них одинаково.

А вот работа с датами отличается:
http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=SQL_reference

0 голосов
ответил 26 Июль, 10 от JGBoBBy (4,940 баллов)
Прекрасно работает в 9.3 и для файловой базы:
"Datastart" = (SELECT MAX ( "Datastart" ) from table_with_Datastart)

и для персональной:
[Datastart] = (SELECT MAX( [Datastart] ) from table_with_Datastart)

При условии, что нет связанных таблиц или Join'ов.
Но как видишь синтаксис отличается.

Т.е. полный запрос к базе выглядит так:
SELECT * from table_with_Datastart where "Datastart" = (SELECT MAX ( "Datastart" ) from table_with_Datastart)
Или:
SELECT * from table_with_Datastart where [Datastart] = (SELECT MAX ( [Datastart] ) from table_with_Datastart)

Для SQL Server и Postgres в общем случае тоже будут отличия, но не в этом запросе.
Подзапрос MAX работает в них одинаково.

А вот работа с датами отличается:
http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=SQL_reference



Спасибо Гриш. Проблема еще вот в чем: в ArcMAP 931 мой вариант прекрасно работает и с полем типа DATE. Не работает лишь в ArcCatalog, видимо, по причине того, что в запросе указывается таблица из которой выполняется SELECT и если ArcMAP понимает просто название таблицы (... FROM table), то (наверно) для ArcCatalog это непонятное название (хотя, повторюсь в 10ке такой запрос работает и в ArcCatalog). Собственно пока я не очень понимаю как тулом (например, Table to Table или Table Select) выгрузить часть исходной таблицы, содержащей максимальное значение какого либо поля (не обязательно типа DATE).
    
0 голосов
ответил 26 Июль, 10 от Grigoriy (127,020 баллов)
Работает и ArcToolBox->Анализ(Analisys Tools)->Извлечение(Extract)->Выборка(Select)
image

и ArcToolBox->Анализ(Analisys Tools)->Извлечение(Extract)->Выборка по таблице(Table Select)
image
0 голосов
ответил 26 Июль, 10 от JGBoBBy (4,940 баллов)
Да, действительно, проверил сейчас на другой машине - все работает. Чудеса какие то. Спасибо
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...