最小/最大时间戳后跟特定日期

vsikbqxv  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(472)

表包括以下内容:

  1. +------+----------------+--------------------------------------+
  2. | ID | Date | Timestamp |
  3. +------+----------------+--------------------------------------+
  4. | 1 | 01-01-2020 | 01-01-2020 10:00:00 |
  5. | 1 | 06-01-2020 | 06-01-2020 23:00:00 |
  6. | 1 | 03-02-2020 | 03-02-2020 10:00:00 |
  7. | 2 | 06-01-2020 | 06-01-2020 12:49:00 |
  8. | 2 | 07-03-2020 | 07-03-2020 10:51:00 |
  9. | 3 | 23-01-1992 | 23-01-1992 09:00:00 |
  10. | 3 | 23-01-1992 | 23-01-1992 10:00:00 |
  11. +------+----------------+--------------------------------------+

我想得到最小时间戳日期为'06-01-2020'的id,答案应该是id#2

  1. SELECT
  2. ID,
  3. MIN(Timestamp)
  4. FROM Table
  5. WHERE Date = '06-01-2020'
  6. GROUP BY ID

我对上述的理解是,在得到最小时间戳之前,首先过滤日期,这会导致id#1和#2的结果不正确。请告知。

v1uwarro

v1uwarro1#

请尝试首先在整个表中查找最小值,然后限制到感兴趣的日期:

  1. SELECT ID, min_timestamp
  2. FROM
  3. (
  4. SELECT ID, MIN(Timestamp) AS min_timestamp
  5. FROM yourTable
  6. GROUP BY ID
  7. ) t
  8. WHERE Date = '2020-06-01';
dxpyg8gm

dxpyg8gm2#

你似乎想要两个条件: MIN(timestamp) 每个id ID 在特定日期有记录的
你可以 HAVING :

  1. SELECT ID, MIN(Timestamp)
  2. FROM Table
  3. GROUP BY ID
  4. HAVING SUM(CASE WHEN Date = '2020-06-01' THEN 1 ELSE 0 END) > 0;

这是由 id 并返回最小时间戳。然后它过滤ID,以便只过滤日期为2020-06-01的ID。
如果你 '2020-06-01' 是表中最新的日期,可以简化为:

  1. HAVING MAX(Date) = '2020-06-01'
o75abkj4

o75abkj43#

这将返回ID,其最小时间戳为06-01-2020

  1. SELECT
  2. ID,
  3. MIN(Timestamp)
  4. FROM Table
  5. GROUP BY ID
  6. HAVING min(Date) = date '2020-01-06'

或者不带日期列

  1. HAVING cast(min(timestamp as date)) = date '2020-01-06'

相关问题