假设一个包含三个字段的简单表:一个 user_id
和两个日期 last_login
和 last_api_usage
。
我想通过按两个日期中较早的日期对表格进行排序来查找不活动的用户。示例:
user_id | last_login | last_api_usage
------------+---------------+----------------
1 | 2020-06-01 | NULL
2 | 2020-09-01 | 2020-03-01
3 | 2020-05-01 | 2020-08-01
Result order: 2, 3, 1
用户 2 是最活跃的,因为虽然他有一段时间没有使用 API,但登录时间是 9 月。由于 8 月份的 API 使用,接下来是用户 3。
当然,按两个日期对结果进行排序没有问题 (...ORDER BY last_login, last_api_usage DESC
),但这会返回结果 2, 1, 3
而不是预期的结果。
如何按两个日期的较早/顺序排序?
答案 0 :(得分:4)
您可以按如下方式使用 least
和 coalesce
函数:
ORDER BY least(last_login, coalesce(last_api_usage,last_login))
答案 1 :(得分:0)
你的 RDBMS 是什么?
rrapply(mylist, how = "melt")
L1 L2 L3 value
1 lois hair color orange
2 lois hair form flat
3 lois sex <NA> female
或使用合并函数
谢谢。
答案 2 :(得分:0)
OP 您可以 union all
取消旋转该列,然后对其进行排序。
例如:
select * from (
select user_id,use_date ,row_number()over(partition by user_id order by use_date desc) rn from (
select user_id, last_login as use_date
from [TABLE]
union all
select user_id,last_api_usage
from [TABLE]
) a ) b
where rn = 1
order by use_date
逻辑很简单,将两列合并为一列,然后过滤具有最大date
的行,在以下超链接中,我没有为伪数据使用正确的日期格式,但想法是相同的。
这里是 db<>fiddle 以便更好地检查。