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] 之间的特定日期范围获取数据
2. 一旦获取范围内的日期,它将获取没有重复的最新日期。

输出应该是这样的:
1.date range between

[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<=而不是,BETWEEN因为使用BETWEEN.

于 2013-03-28T01:58:13.053 回答
0

我想你想要pk_id最大时间戳的时间。

要在 MySQL 中执行此操作,您通常必须重新加入原始数据。但是,在您的情况下,pk_id 似乎随着时间戳的增加而增加。如果这是真的,那么下面的查询应该返回你想要的:

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 回答