2

クエリを作成するのに問題がありました。

SELECT * FROM YourTable AS T1
INNER JOIN
(SELECT user_id , MIN(some_timestamp)  AS some_timestamp FROM YourTable
GROUP BY user_id) AS T2
ON T1.User_Id = T2.User_Id AND T1.some_timestamp = T2.some_timestamp
WHERE Some_Timestamp BETWEEN '13-Jun-12 08:00' AND '13-Jun-12 10:00'

テーブル名: YourTable


| PK_ID | USER_ID |  SOME_TIMESTAMP |
------------------------------------|
|     1 |     123 | 13-Jun-12 14:30 |
|     2 |     123 | 13-Jun-12 08:50 |
|     3 |     567 | 13-Jun-12 09:23 |
|     4 |     567 | 13-Jun-12 09:45 |
|     5 |     567 | 13-Jun-12 09:40 |
|     6 |     890 | 13-Jun-12 08:44 |   

私が取得したいのはこのようなもの
です 1.[13-Jun-12 08:00]と[13-Jun-12 10:00]の間の特定の日付範囲からデータを
取得します重複することなく最新の日付を取得します。

出力は次のようになります

[13-Jun-12 08:00] & [13-Jun-12 10:00]

2. 重複のない最新のタイムスタンプのみを取得します。

結果はこのようになるはずです



| PK_ID | USER_ID |  SOME_TIMESTAMP |
------------------------------------|
|     2 |     123 | 13-Jun-12 08:50 |
|     4 |     567 | 13-Jun-12 09:45 |
|     6 |     890 | 13-Jun-12 08:44 |

皆様、本当にありがとうございました!

4

3 に答える 3

4
SELECT 
    pk_id,
    user_id,
    MAX(some_timestamp)
FROM
    your_table
WHERE
    some_timestamp>= '13-Jun-12 08:00' 
AND some_timestamp<= '13-Jun-12 10:00'
GROUP BY
    user_id
ORDER BY
    pk_id ASC

SQL フィドル

于 2013-03-28T01:46:57.647 に答える
1

あなたのクエリはかなり近かったです。MAXの代わりにを選択し、基準をサブクエリMINに移動する必要があります。WHERE

SELECT * 
FROM YourTable AS T1
  INNER JOIN
  (SELECT user_id , MAX(some_timestamp)  AS some_timestamp 
   FROM YourTable
  WHERE Some_Timestamp BETWEEN '2013-06-12 08:00' AND '2013-06-12 10:00'
   GROUP BY user_id) AS T2
    ON T1.User_Id = T2.User_Id AND T1.some_timestamp = T2.some_timestamp

SQL フィドルのデモ

戻る:

PK_ID    USER_ID   SOME_TIMESTAMP
2        123       June, 12 2013 08:50
4        567       June, 12 2013 09:45
6        890       June, 12 2013 08:44

SOME_TIMESTAMP必要に応じてフィールドをフォーマットします。また、 では目的の結果が得られない可能性があるため、代わりに>=andを使用することをお勧めします。<=BETWEENBETWEEN

于 2013-03-28T01:58:13.053 に答える
0

pk_idタイムスタンプが最大のときが欲しいと思います。

MySQL でこれを行うには、通常、元のデータを元に戻す必要があります。これが true の場合、次のクエリは必要なものを返す必要があります。

select max(pk_id) as pk_id, user_id, max(some_timestamp)
FROM your_table
WHERE Some_Timestamp between '13-Jun-12 08:00' AND Some_Timestamp <= '13-Jun-12 10:00'
GROUP BY user_id
ORDER BY pk_id ASC

を含めない場合max(pk_id)、任意pk_idの値が返され、最大タイムスタンプとは関係ありません。

于 2013-03-28T01:58:20.673 に答える