【问题标题】:posgres sql : how to select in list of valuepostgresql:如何在值列表中选择
【发布时间】:2023-02-11 17:45:47
【问题描述】:

postgresql

我有这样的桌子

表:用户

user_id user_name
u1 user1
u2 user2
u3 user3
u4 user4

表:访问

visit_id user_id visit_date
v1 u1 2023-01-15
v2 u1 2023-01-16
v3 u2 2023-01-17
v4 u2 2023-01-18
v5 u4 2023-01-19
v6 u4 2023-01-20
v7 u4 2023-01-21
v8 u4 2023-01-22
v9 u4 2023-01-23
v10 u4 2023-01-24
v11 u4 2023-01-25

我怎样才能像这样过滤值列表:

加入故事后

我想 :: where user_name in ('user1','user2','user4') and user1 = '2023-01-16' , user2 = '2023-01-17' , user4 = '2023-01- 23'

结果

User id visit_date
user1 2023-01-16
user2 2023-01-17
user4 2023-01-23

【问题讨论】:

  • 你的意思是你希望每个用户只在他们相应的、自己的、特定的日期,而不是这些用户中的任何一个在这些日期? select a.user_name, b.visit_date from user a inner join visit b on a.user_id=b.user_id where (a.user_name,b.visit_date) in (('user1','2023-01-16'),('user2','2023-01-17'),('user4','2023-01-23'));
  • 您的解决方案是我需要的方式。非常感谢。
  • 我已将其重新发布为下面的正确答案。

标签: postgresql


【解决方案1】:

假设您希望每个用户只在他们相应的、自己的、特定的日期,而不是这些用户中的任何一个日期:

select a.user_name, 
       b.visit_date 
from user a 
   inner join visit b 
      using(user_id) 
where (a.user_name, b.visit_date) 
      in (('user1', '2023-01-16'),
          ('user2', '2023-01-17'),
          ('user4', '2023-01-23'));

只要那些不是手工挑选的用户+日期对,可能有更简单的方法来指定返回哪些对使用Date/Time functions and operatorsconditional expressionswindow functions——它们让你制定非常具体的规则,比如“为每个用户,只返回他们的第二个日期,如果是星期四或周末则不返回,并跳过闰年。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2023-03-17
    • 2016-10-09
    相关资源
    最近更新 更多