【问题标题】:IF in sql to choose which values to selectIF 在 sql 中选择要选择的值
【发布时间】:2021-07-21 20:51:21
【问题描述】:

我试图在 sql 中使用 IF 或 CASE 语句来选择何时选择列中的值。本质上,我在表格中有一些数据,如下所示:

我的目标是查看同一客户连续数周订购了哪些商品。我有 1 个月的日期,但我可以对一周中的每一天进行 7 个单独的查询和 1 个查询。我正在尝试做类似的事情:

Select item, date, customer, truck

    If customer, item combo appears in multiple weeks

如果您知道我该怎么做,请告诉我!

【问题讨论】:

  • 您使用的是哪个 DBMS? SQL 服务器? MySQL?甲骨文?了解这一点很重要。然后,您是否在某个日期范围内,例如第 20 到 24 个日历周,或者只是连续几个星期(例如 5 个相邻的星期,无论是今年还是五年前)?或者你想要两者的结合,例如2021 年连续五周?
  • 然后,您是希望每个客户和项目一行,还是希望每个客户和项目和周显示一行,或者您希望显示客户和项目及其所有订单周?
  • 我正在使用 Snowflake,我有多年的数据,但是在处理它时,我在 WHERE 子句中将其限制为 1 个月,以便它运行得更快。如果可能的话,我还想展示一些连续几周的专栏。我目前正在使用 Gordon 提供的解决方案,它解决了我在这篇文章中提出的具体问题,但如果您也知道如何创建“连续周数”列,那将不胜感激!我想查看每个客户和项目的一行数据,我现在按项目 ID 订购,然后按客户订购。

标签: sql if-statement select


【解决方案1】:

假设每个客户和项目每周最多有一行(如示例数据中所示),您可以使用lead()lag()。以下假设您的意思是正好相隔 7 天:

select t.*
from (select t.*,
             lag(orderdate) over (partition by customer, itemid order by orderdate) as prev_orderdate,
             lead(orderdate) over (partition by customer, itemid order by orderdate) as next_orderdate
      from t
     ) t
where prev_orderdate = orderdate - interval '7 day' or
      next_order_date = orderdate + interval '7 day';

请注意,日期/时间功能高度依赖于数据库,因此您可能需要针对您的数据库功能进行调整。

【讨论】:

  • 谢谢!出于好奇,“7 天”只是 SQL 理解的值,可以应用于日期类型的数据吗?或者间隔关键字在运行时是否以某种方式使其可读?
  • @laurat801 。 . . interval '7 day' 是间隔常数的 SQL 标准格式。正如答案所解释的,您可能需要调整语法以适应您使用的任何数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2017-07-22
相关资源
最近更新 更多