Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取日期范围内的最大数据,无重复MYSQL_Mysql_Sql_Group By_Between - Fatal编程技术网

获取日期范围内的最大数据,无重复MYSQL

获取日期范围内的最大数据,无重复MYSQL,mysql,sql,group-by,between,Mysql,Sql,Group By,Between,我很难提出问题 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

我很难提出问题

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 |   
我想要的是这样的。从[13-Jun-12 08:00]和[13-Jun-12 10:00]2之间的特定日期范围获取数据。一旦它获取了范围内的日期,它将获取没有重复的最新日期

[13-Jun-12 08:00] & [13-Jun-12 10:00]
输出应如下所示: 1.日期范围介于
[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 |
非常感谢大家

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

你的问题很接近。需要选择最大值而不是最小值,并且需要将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
返回:

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字段。我还建议使用>=和我想您希望在最大时间戳时使用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

如果不包括maxpk\u id,则将返回任意的pk\u id,它与最大时间戳无关。

这将为567返回不正确的pk\u id-它应返回4。注意此方法。。这是一个仅在所有其他数据相同时才起作用的快捷方式。。正如@sgeddes所指出的,这在这里失败,因为它选择了错误的pk_id,其中一些时间戳>='13-Jun-12 08:00'和一些时间戳@TigaPuluhSaat-你知道了。祝你好运!