简体   繁体   English

SQL - 需要查询每个用户的 last_date、max_date、min_date

[英]SQL - need a query for the last_date for each user, max_date, min_date

The original table looks like:原始表格如下所示:

id   date        name
----------------------
11   01-2021     'aaa'
11   03-2020     'bbb'
11   01-2019     'ccc'
11   12-2017     'ddd'
12   02-2011     'kkk'
12   05-2015     'lll'
12   12-2020     'mmm'

the expected output:预期的 output:

id.   min_date.  max_date   name
---------------------------------
11    12-2017    01-2021    'aaa'
12    02-2011    12-2020    'mmm'

I need to have, min, max dates and the name that corresponds to the max_date.我需要有,最小,最大日期和对应于 max_date 的名称。 I know a way to get min, max dates and separately how to get the date corresponding to the max_date (using ROW_NUMBER() OVER(PARTITION BY...)), but cannot figure out how to combine both together.我知道一种获取最小、最大日期的方法以及如何分别获取与 max_date 相对应的日期(使用 ROW_NUMBER() OVER(PARTITION BY...)),但无法弄清楚如何将两者结合在一起。

One option is to use ROW_NUMBER along with pivoting logic to select the name corresponding the max date per each id :一种选择是使用ROW_NUMBER以及旋转逻辑到 select 对应每个id的最大日期的名称:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) rn
    FROM yourTable
)

SELECT
    id,
    MIN(date) AS min_date,
    MAX(date) AS max_date,
    MAX(CASE WHEN rn = 1 THEN name END) AS name
FROM cte
GROUP BY
    id;

下面演示链接的屏幕截图

Demo 演示

Note that your current date column appears to be text.请注意,您当前的date列似乎是文本。 Don't store your dates as text, instead use a proper date column.不要将日期存储为文本,而是使用适当的日期列。

This below query should work下面的查询应该可以工作

SELECT *
FROM tbl1 t1
INNER JOIN
  (SELECT id,
          min(date) AS min_date,
          max(date) AS max_date
   FROM tbl1
   GROUP BY id) t2 ON t1.date = t2.max_date

Demo 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM