2011-12-14 15 views
0

MS AccessアプリケーションをSQLサーバーのバックエンドに書き直しています。私は、アクセスがMAX()を使用している方法でSQL Serverがそれをやっている方法でいくつかの異常な動作に苦しんでいます。たぶん睡眠不足かもしれませんが、私は何時間もこれを見つめており、なぜSQLサーバーの結果が異なるのか分かりません。Max()MS AccessとSQLサーバーの動作が異なります

サンプルデータ:

Acct  ByUser TranType TranID  AddID ClearTime    TranTime 
12345678 CZ12   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 
12345678 CZ24   W 55545124 CZ36 12/12/2011 10:01:26 AM 12/12/2011 10:01:26 AM 
12345678 CZ36   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 
12345678 MG12   W 55545124 CZ36 12/12/2011 10:48:43 AM 12/12/2011 10:48:43 AM 
12345678 CZ25   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 

MS Accessクエリ:Accessで

SELECT Acct, TypeID, TranType 
    , Max(TranTime) AS MaxOfTranTime 
    , AddID 
    , Max(ClearTime) AS MaxOfClearTime 
FROM Cleared 
WHERE 
(
    ((ByUser) Like "CZ*" Or (ByUser) Like "TR*" Or 
    (ByUser) Like "RR*" Or (ByUser) Like "MG*" Or 
    (ByUser) Like "RN*" Or (ByUser) Like "PS*" Or 
    (ByUser) Like "OP*" Or (ByUser) Like "JA*" Or 
    (ByUser) Like "IC*" Or (ByUser) Like "IB*" Or 
    (ByUser) Like "FO*" Or (ByUser) Like "DV*" Or 
    (ByUser) Like "CD*" Or (ByUser) Like "BO*" Or 
    (ByUser) Like "2D*") 
) 
GROUP BY Acct, TypeID, TranType, AddID 

結果:

Account  TranID TranType MaxOfTranTime    AddID MaxOfClearTime 
12345678 55545124 W  12/12/2011 10:48:43 AM  CZ36 12/12/2011 9:45:31 AM 

SQLサーバーでの問合せは、私のByUsersが保存されていることで若干異なっていますトン数のクエリでタイピングを最小限に抑えるためにテーブルに格納します。

SELECT C.Acct 
    , C.RequestId 
    , C.TypeCode 
    , Max(C.TranTime) as MaxTranTime 
    , C.AddUserId 
    , Max(C.ClearDate) As MaxClearDate 
FROM Cleared C 
WHERE EXISTS (SELECT * 
       FROM UserIdFilter U 
       WHERE ByUserId LIKE U.UserId) 
GROUP BY Acct, RequestId, TypeCode, AddUserId 

SQL Serverの結果は以下のとおりです。私はこれを通過するとき

Account  TranID TranType MaxOfTranTime   AddID MaxOfClearTime 
12345678 55545124 W  12/12/2011 10:48:43 AM CZ36 12/12/2011 10:48:43 AM 

SQLサーバは2011年12月12日10時48分43秒AMのMaxOfClearTimeを得ることに正確であるように思わしかし私は何かを逃していますか?アクセス処理はMAX()と異なっていますか?私はこれで私の心を失っているように感じるので、これに関する他の目は素晴らしいでしょう。

+0

第1回で 'Max(ClearTime)AS MaxOfClearTime'を使用し、2番目に 'Max(C.ClearDate)As MaxReasClearDate'を使用します。 – ysrb

+0

@ysrbそれらは同じです。 、サイトに投稿する前にデータをスクラブする必要があります。私は訂正しました – Taryn

+0

"SELECT * FROM UserIdFilter U WHERE ByUserId LIKE U.UserId"は、最初のクエリと同じ値を返しますか? –

答えて

1

私が提供したデータをAccessに入れてクエリを実行したところ、出力は10 > 9でした。

もちろん、ClearTimeとTranTimeの両方がDateTimeとして保存されていると仮定しましたが、テキストに変更してサンプルに一致するように書式を変更すると、同じ結果が得られます。つまり、です。

MS Accessでテーブルのスキーマを確認できますか?

+0

これは正しい方向に私を指摘した。それはアクセスのテキストフィールドであり、日付フィールドではありませんでした。 – Taryn

関連する問題