4

ロギングに使用されるテーブルにいくつかのエントリを作成する、数時間ごとに実行されるルーチンがあります。私がする必要があるのは、共通のアカウント ID を持つ最新のタイムスタンプを持つすべてのレコードを選択することです。このようなもの:

SELECT * 
FROM TABLE_logs 
WHERE ACCOUNT_ID='12345' 
ORDER BY TIMESTAMP DESC 

私が立ち往生しているのはLIMIT 5、定期的な間隔ごとに作成されるレコードの数が異なる可能性があるため、言うことができない、またはそのようなことです。したがって、たとえば、ルーチンが午前 10 時に実行されると、6 つのテーブル エントリが作成され、午後 2 時に 4 つのテーブル エントリのみが作成される場合があります。

いくつあるかわからなくても、最新のレコードのグループを選択する方法はありますか?

4

2 に答える 2

3

Table_Logs テーブルの複数のエントリが同じタイムスタンプを持つ可能性があり、最近入力されたエントリをそれぞれ返したいと仮定すると、次を使用する必要がありますGROUP BY

SELECT Field1, Field2, Max(TimeStamp) maxTime
FROM Table_Logs
WHERE Account_Id = '12345'
GROUP BY Field1, Field2

Field1 などは、Table_Logs で返したいフィールドです。

試してみる SQL Fiddleのサンプルを次に示します。

幸運を。

于 2013-01-27T04:36:13.500 に答える
0

あなたが望むのは、タイムスタンプでグループ化することだと思います。午前 10 時に入力されたものはすべて同じタイムスタンプを持ち、午後 2 時も同様であると仮定すると、次のようになります。

  SELECT timestamp, Field1, Field2
    FROM Table_Logs
GROUP BY timestamp

タイムスタンプが正確すぎる場合は、単純に部分文字列を実行します。

  SELECT LEFT(timestamp, 5), Field1, Field2
    FROM Table_Logs
GROUP BY LEFT(timestamp, 5)

タイムスタンプが文字列 (ログ ファイル) であると仮定します。そうでない場合は、文字列化する必要があります。

于 2013-01-27T04:47:38.077 に答える