2014-05-23 4 views
0

마감 기한이 지났으며이를 파악할 수 없습니다.Fox Pro MAX (날짜)를 사용하여 값을 가져 오는 중 오류가 발생했습니다.

해당하는 최대 shipdate에 대한 값을 얻기 위해 테이블을 쿼리하려고합니다. 내 질문은 아래와 같습니다. 이것은 ODBC 드라이버를 사용하는 Fox Pro 용입니다.

ADODB_vfp Object 
(
    [databaseType] => vfp 
    [fmtDate] => {^Y-m-d} 
    [fmtTimeStamp] => {^Y-m-d, h:i:sA} 
    [replaceQuote] => '+chr(39)+' 
    [true] => .T. 
    [false] => .F. 
    [hasTop] => top 
    [_bindInputArray] => 
    [sysTimeStamp] => datetime() 
    [sysDate] => date() 
    [ansiOuter] => 1 
    [hasTransactions] => 
    [curmode] => 
    [dataProvider] => odbc 
    [hasAffectedRows] => 1 
    [binmode] => 1 
    [useFetchArray] => 
    [_genSeqSQL] => create table %s (id integer) 
    [_autocommit] => 1 
    [_haserrorfunctions] => 1 
    [_has_stupid_odbc_fetch_api_change] => 1 
    [_lastAffectedRows] => 0 
    [uCaseTables] => 1 
    [_dropSeqSQL] => drop table %s 
    [database] => 
    [host] => DRIVER={Microsoft Visual FoxPro Driver};SOURCETYPE=dbf;SOURCEDB=C:\Sites\hub.fieldfresh.dev\_cache\VP10\PRAXIS\;EXCLUSIVE=NO; 
    [user] => 
    [password] => 
    [debug] => 
    [maxblobsize] => 262144 
    [concat_operator] => + 
    [substr] => substr 
    [length] => length 
    [random] => rand() 
    [upperCase] => upper 
    [nameQuote] => " 
     [charSet] => 
    [metaDatabasesSQL] => 
    [metaTablesSQL] => 
    [uniqueOrderBy] => 
    [emptyDate] => 
    [emptyTimeStamp] => 
    [lastInsID] => 
    [hasInsertID] => 
    [hasLimit] => 
    [readOnly] => 
    [hasMoveFirst] => 
    [hasGenID] => 
    [genID] => 0 
    [raiseErrorFn] => 
    [isoDates] => 
    [cacheSecs] => 3600 
    [memCache] => 
    [memCacheHost] => 
    [memCachePort] => 11211 
    [memCacheCompress] => 
    [sysUTimeStamp] => 
    [arrayClass] => ADORecordSet_array 
    [noNullStrings] => 
    [numCacheHits] => 0 
    [numCacheMisses] => 0 
    [pageExecuteCountRows] => 1 
    [uniqueSort] => 
    [leftOuter] => 
    [rightOuter] => 
    [autoRollback] => 
    [poorAffectedRows] => 
    [fnExecute] => 
    [fnCacheExecute] => 
    [blobEncodeType] => 
    [rsPrefix] => ADORecordSet_ 
    [autoCommit] => 1 
    [transOff] => 0 
    [transCnt] => 0 
    [fetchMode] => 2 
    [null2null] => null 
    [bulkBind] => 
    [_oldRaiseFn] => 
    [_transOK] => 
    [_connectionID] => Resource id #8 
    [_errorMsg] => [Microsoft][ODBC Visual FoxPro Driver]Syntax error. 
    [_errorCode] => 37000 
    [_queryID] => 
    [_isPersistentConnection] => 
    [_evalAll] => 
    [_affected] => 
    [_logsql] => 
    [_transmode] => 
    [_error] => 
) 

오류는 많은 말을하지 않습니다

SELECT 
    so1.sono, 
    so1.custno, 
    so1.item, 
    so1.shipdate as last_shipdate, 
    so1.price as last_price 
FROM sotran01 so1 
    INNER JOIN (
      SELECT 
        custno, 
        item, 
        MAX(shipdate) as last_shipdate 
      FROM sotran01 
      WHERE shipdate >= {d'2013-05-23'} 
      AND shipdate <= {d'2014-05-23'} 
      GROUP BY custno, item 
    ) so2 ON (so1.custno = so2.custno AND so1.item = so2.item AND so1.shipdate = so2.last_shipdate) 
WHERE so1.item IN (
    SELECT item 
    FROM arpric01 
) 
ORDER BY so1.custno, so1.item, so1.shipdate 

이 내가 (ADOdb 사용) 무엇을 얻을 수 있습니다. 나는 코드를 복사하여 MySQL에 붙여 넣을 수 있으며, 정상적으로 돌아가서 내가 기대 한 것을 반환한다. 다행스럽게도 폭스 프로의 경험이 많은 또 다른 눈은이 문제가 무엇인지 알 수 있습니다.

어떤 도움을 주셔서 감사합니다.

답변

0

하위 쿼리가 잘못되었습니다. 다음은 하위 쿼리입니다.

INNER JOIN (
     SELECT custno, item, MAX(shipdate) as last_shipdate 
     FROM sotran01 
     WHERE shipdate >= {d'2013-05-23'} 
     AND shipdate <= {d'2014-05-23'} 
     GROUP BY custno, item, last_shipdate 
-------------------------------^ 
) 

이는 집계 열입니다. 삭제 :

INNER JOIN (
     SELECT custno, item, MAX(shipdate) as last_shipdate 
     FROM sotran01 
     WHERE shipdate >= {d'2013-05-23'} 
     AND shipdate <= {d'2014-05-23'} 
     GROUP BY custno, item 
) 
+0

답장을 보내 주셔서 감사합니다. 나는 그것을 제거하고 같은 오류가 있습니다. 확실히 INNER JOIN과 관련이 있습니다. 내가 그것을 제거하면 쿼리가 잘 실행됩니다. ODBC에는 많은 한계가 있습니다. INNER JOIN 하위 쿼리가 지원되지 않을 수 있습니까? 이걸보고 있는데 – Jeremy

+1

날짜 형식이 맞습니까? 유효한 VFP 형식으로 보이지 않습니다. 나는 {^ 2014-05-23}을 사용할 것이다. –