0

シリアル番号の1つのインスタンスと他のいくつかの列のみを返すMSAccessクエリを作成する必要があります。例えば

SerialNumber    CRM        EmailClient   VersionBuild  IPAddress  DateLogged
------------    ----       -----------   ------------  ---------  ----------
123456          Outlook    Outlook       4.7.4         0.0.0.0    20120625
123456          SugarCRM   SMTP          4.6.1         0.0.0.0    20120621
435352          ACT!       Outlook       4.5.2         0.0.0.0    20120619
537352          ACT!       SMTP          4.5.3         0.0.0.0    20120619

結果は次のようになります

SerialNumber    CRM        EmailClient   VersionBuild  IPAddress  DateLogged
------------    ----       -----------   ------------  ---------  ----------
123456          Outlook    Outlook       4.7.4         0.0.0.0    20120625
435352          ACT!       Outlook       4.5.2         0.0.0.0    20120619
537352          ACT!       SMTP          4.5.3         0.0.0.0    20120619

次のクエリを使用してこれを完了しようとしました。FirstとGroupbyはお互いにキャンセルし合うと思います。

SELECT FIRST(LogData.SerialNumber), LogData.CRM, LogData.EmailClient, LogData.VersionBuild, LogData.IPAddress, LogData.DateLogged
FROM LogData
GROUP BY  LogData.CRM, LogData.EmailClient, LogData.VersionBuild, LogData.IPAddress, LogData.DateLogged
4

3 に答える 3

1

コメントで、LogData には主キーがないことに言及しました。自動付番の主キーを追加すると、問題の解決が非常に簡単になります。

サブクエリを使用して各グループの単一のid値を返し、サブクエリを に返します。SerialNumberINNER JOINLogData

SELECT base.*
FROM
    LogData AS base
    INNER JOIN (
        SELECT SerialNumber, Min(id) AS which_id
        FROM LogData
        GROUP BY SerialNumber
    ) AS sub
    ON base.id = sub.which_id;

表示するフィールドのリストに置き換えbase.*ます。

于 2012-07-19T15:47:42.003 に答える
0

私はあなたがこれをしたいと思います:

  • SerialNumber を 1 つだけ取得 => GROUP BY SerialNumber
  • SerialNumber ごとに 1 つの (最初の) 名前のみを取得 => FIRST(LogData.First)
SELECT LogData.SerialNumber, FIRST(LogData.First), FIRST(LogData.Last)
FROM LogData
GROUP BY LogData.SerialNumber

ただし、注意してください: これにより、次のような混合レコードが生じる可能性があります ("FIRST" 関数の場合を除きます)。

シリアル ファースト ラスト
------ ----- ----
123456 フランク・スミス

ところで: "FIRST"-Grouping-Function はすべての SQL システムでサポートされているわけではありません : http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html SQL標準を満たす関数...

于 2012-07-19T13:38:14.407 に答える
0

これはきれいではありませんが...

SELECT L.SerialNumber, 
            (Select Top 1 A.First from LogData as A where A.SerialNumber = L.SerialNumber Order by A.First, A.Last) AS [First], 
            (Select Top 1 A.Last from LogData as A where A.SerialNumber = L.SerialNumber Order by A.First, A.Last) AS [Last]
FROM LogData AS L
GROUP BY L.SerialNumber;

サブクエリを使用しているため、常に期待される結果が得られるように順序を指定できることを除いて、これは基本的にトーマスの答えです。

于 2012-07-19T14:39:08.213 に答える