选择日期最小的所有行[关闭]

Posted

技术标签:

【中文标题】选择日期最小的所有行[关闭]【英文标题】:Select all rows with smallest date [closed] 【发布时间】:2018-06-13 19:56:43 【问题描述】:

我需要有关 SQL 查询的帮助。从 my_wl​​_table 中,我需要选择所有行,但以下条件除外:如果 session_id 出现多次(例如,s1),我需要为此会话 ID 选择 first_trigger_hit_datetime 列最低的原始数据:

my_wl​​_table:

**session_id  |  first_trigger_hit_datetime  |  column1**  
s1            |         2018-06-04           |  T          
s2            |         2018-06-06           |  C     
s3            |         2018-06-02           |  T     
s1            |         2018-06-09           |  T     

我需要的输出

s1            |         2018-06-04           |  T          
s2            |         2018-06-06           |  C     
s3            |         2018-06-02           |  T   

因此,对于有多个条目的会话,我只需要选择日期时间值最小的一行。最后一行(日期时间为 2018-06-09),不应包含在输出结果中。

【问题讨论】:

你能和我们分享你的代码尝试吗?你写了什么没有产生正确的输出? 【参考方案1】:

一种方法使用first_value()

select distinct session_id,
       min(first_trigger_hit_datetime) over (partition by session_id) as first_trigger_hit_datetime,
       first_value() over (partition by session_id order by first_trigger_hit_datetime desc) as column1
from t;

因为这只能作为解析函数使用,所以需要select distinct

【讨论】:

您好,感谢您的回答,这部分是什么意思?:first_value() over (partition by session_id order by first_trigger_hit_datetime desc) as column1 @Bilberryfm 。 . . docs.aws.amazon.com/redshift/latest/dg/r_WF_first_value.html.【参考方案2】:

这似乎可行。

select session_id,
       first_trigger_hit_datetime,
       column1
  from (select t.*,
               row_number() over 
                 ( partition by session_id
                       order by first_trigger_hit_datetime
                 ) as rn 
          from t
       ) tmp
 where rn = 1;

或者:

SELECT * 
  FROM t
 ORDER
    BY row_number() over 
         ( partition by session_id
               order by first_trigger_hit_datetime
         ) as rn
FETCH FIRST 1 ROWS WITH TIES; -- Double check this does what you want in case of a tie on session_id, first_trigger_hit_datetime

【讨论】:

以上是关于选择日期最小的所有行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL选择具有最大和最小日期的行

SQL 查询不会选择日期之间的所有行

如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)

为啥这个引导日期选择器不显示日期选择器?

如何在 android 日期选择器中将特定选定日期设置为最小日期? [复制]

日期选择器滚动到过去的日期,即使最小日期设置为当前日期