Select Max value arcpy<\/A>, a mesma pergunta no GeoNet que me levou a pesquisar esse problema há muitos meses. Vamos começar com duas tabelas básicas (TableA e TableB), cada uma tendo um campo texto e um inteiro, e a tabela contendo um subconjunto de registros da outra tabela.<\/P>
<\/P>
<\/P>
>><\/SPAN>><\/SPAN> fgdb =<\/SPAN> # caminho para file geodatabase<\/SPAN>\n>><\/SPAN>><\/SPAN> pgdb =<\/SPAN> # caminho para personal geodatabase<\/SPAN>\n>><\/SPAN>><\/SPAN> egdb =<\/SPAN> # caminho para enterprise geodatabase, SQL Server usado no exemplo<\/SPAN>\n>><\/SPAN>><\/SPAN> gpkg =<\/SPAN> # caminho para GeoPackage<\/SPAN>\n>><\/SPAN>><\/SPAN> gdbs =<\/SPAN> (<\/SPAN>fgdb, pgdb, egdb, gpkg)<\/SPAN>\n>><\/SPAN>><\/SPAN> \n>><\/SPAN>><\/SPAN> values =<\/SPAN> (<\/SPAN>(<\/SPAN>"A", 1), ( class="punctuation token">)<\/SPAN>:<\/SPAN>
.<\/SPAN>.<\/SPAN>.<\/SPAN> table =<\/SPAN> arcpy.<\/SPAN>CreateTable_management(<\/SPAN>gdb, <\/SPAN>table_names[<\/SPAN>i-1<\/SPAN>]<\/SPAN>)<\/SPAN>
.<\/SPAN>.<\/SPAN>.<\/SPAN> arcpy.<\/SPAN>AddField_management(<\/SPAN>table, <\/SPAN>"id"<\/SPAN>, <\/SPAN>"TEXT"<\/SPAN>)<\/SPAN>
.<\/SPAN>.<\/SPAN>.<\/SPAN> arcpy.<\/SPAN>AddField_management(<\/SPAN>table, <\/span>"version"<\/span>, <\/span>"LONG"<\/span>)<\/span>
.<\/span>.<\/span>.<\/span> with<\/span> arcpy . < /Span > da . < /Span > InsertCursor ( < /Span > table , < /Span> ( < /Span > "id" < /Span > , < /Span > "version" < /Span > ) < /Span > ) < /Span> as < /Span> cur : < /Span>
.<\/span>.<\/span>.<\/span> for<\/span> value in<\/span> values[<\/span>:<\/span>:<\/span>i<\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/"><\/">:
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; cur.insertRow(value)
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ;
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ; qry = ("EXISTS (SELECT 1"</ span>
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; FROM TableB"</ span>
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; WHERE TableB.id = TableA.id"</ span>
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp ; AND TableB.version = TableA.version)"</ span>)
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp ; & nbsp ; & nbsp ; & nbsp;
. </ span >< span Class = " punctuation Token "> . </ span >< span Class = " punctuation Token "> . </ span >& nbsp; table_view = arcpy.MakeTableView_management(table, style="margin: 0px 0px 0.63em; padding: 0px 1rem 0px 0.5em; width: 91px; line-height: 1.5em; letter-spacing: 0.02em; font-family: 'Avenir LT W01 65 Medium', Arial, Helvetica, sans-serif; font-size: 0.87rem; font-style: normal; font-weight: 500; float: left; white-space: nowrap; position: relative; box-sizing: border-box; -webkit-font-smoothing: antialiased;" id="toc-hId--1316845959" id="toc-hId--1316845959">Nota:<\/H5>Coberturas, shapefiles e outras fontes de dados baseadas em arquivos que não são geodatabases não suportam subqueries. Subqueries realizadas em classes de feição e tabelas ArcSDE versionadas não retornarão feições armazenadas nas tabelas delta. File geodatabases fornecem suporte limitado para subqueries explicado nesta seção, enquanto personal e ArcSDE geodatabases fornecem suporte completo. Para informações sobre o conjunto completo de capacidades de subquery de personal e ArcSDE geodatabases, consulte a documentação do seu DBMS.<\/P><\/DIV><\/P><\/P><\/P><\/P>Uma subquery é uma consulta aninhada dentro de outra consulta. Pode ser usada para aplicar funções predicadas ou agregadas ou para comparar dados com valores armazenados em outra tabela....<\/P><\/BLOCKQUOTE><\/P>O suporte a subqueries em file geodatabases é limitado ao seguinte:<\/P>Predicado IN. Por exemplo:<\/LI><\/UL>"COUNTRY_NAME" NOT IN (SELECT "COUNTRY_NAME" FROM indep_countries)<\/PRE>Subqueries escalares com operadores de comparação. Uma subquery escalar retorna um único valor. Por exemplo:<\/LI><\/UL>"GDP2006" > (SELECT MAX("GDP2005") FROM countries)<\/PRE>Para file geodatabases, as funções de conjunto AVG, COUNT, MIN, MAX e SUM só podem ser usadas dentro de subqueries escalares.<\/SPAN><\/P>Predicado EXISTS. Por exemplo:<\/LI><\/UL>EXISTS (SELECT * FROM indep_countries WHERE "COUNTRY_NAME" = 'Mexico')<\/PRE><\/BLOCKQUOTE><\/P>A documentação afirma "suporte limitado" para subqueries, mas também afirma que o predicado EXISTS é suportado. Se subqueries não são o problema, talvez subqueries correlacionadas sejam o problema. Afinal, nenhum dos exemplos EXISTS em toda a documentação usa uma subquery correlacionada. Infelizmente, adivinhar é o que nos resta porque subqueries correlacionadas não são mencionadas explicitamente em nenhuma das documentações de file geodatabase que encontrei.<\/P><\/P>A partir deste exemplo simples, fica claro que o file geodatabase fornece resultados incorretos ao usar EXISTS com subqueries correlacionadas. Os resultados incorretos são um bug ou uma limitação do suporte SQL no file geodatabase? Mesmo que alguém tente argumentar pelo último, ainda há o problema do usuário receber resultados incorretos em vez de uma mensagem de erro, que deveria ser o que o usuário recebe se subqueries correlacionadas não forem suportadas.<\/P><\/BODY><\/HTML>