sql - 获取最早日期的 SQL 方法
问题描述
当记录存储在列中时,为每个客户获取销售日期的最佳方法是什么?每条记录都被展平并存储过去 15 年每个月的销售数据。因此,它包含 Client_ID 和销售月份(Dec_08、Jan_09、Feb_09...)作为列标题,列值包含作为整数的销售值(盒子数)。我需要计算 datediff 以获得自第一次销售以来的年数,因此 Month Year 需要在这里作为某种日期答案。我在 Snowflake 中的 SQL 中执行此操作 在 此处输入图像描述
销售示例如下图所示
任何帮助,将不胜感激。
解决方案
您可以使用UNPIVOT构造通过将列转换为行来旋转表。
然后计算最小日期(您需要使用 to_date(yourcolumn,'Mon_YY') 将 month_year 值从字符串转换为日期),按 ClientID 分组,其中 box# 不为空。
您还可以应用 datediff 函数来检索最小日期和当前日期之间的时间(https://docs.snowflake.com/en/sql-reference/functions/datediff.html)。
下面是 UNPIVOT 构造的 Snowflake 文档中的一个示例 ( https://docs.snowflake.com/en/sql-reference/constructs/unpivot.html )。
给定一个表,monthly_sales,具有以下结构和数据,对各个月份列进行反透视,以按月为每个员工返回单个销售值:
-- example setup
create or replace table monthly_sales(empid int, dept text, jan int, feb int, mar int, april int);
insert into monthly_sales values
(1, 'electronics', 100, 200, 300, 100),
(2, 'clothes', 100, 300, 150, 200),
(3, 'cars', 200, 400, 100, 50);
-- UNPIVOT example
select * from monthly_sales
unpivot(sales for month in (jan, feb, mar, april))
order by empid;
+-------+-------------+-------+-------+
| EMPID | DEPT | MONTH | SALES |
|-------+-------------+-------+-------|
| 1 | electronics | JAN | 100 |
| 1 | electronics | FEB | 200 |
| 1 | electronics | MAR | 300 |
| 1 | electronics | APRIL | 100 |
| 2 | clothes | JAN | 100 |
| 2 | clothes | FEB | 300 |
| 2 | clothes | MAR | 150 |
| 2 | clothes | APRIL | 200 |
| 3 | cars | JAN | 200 |
| 3 | cars | FEB | 400 |
| 3 | cars | MAR | 100 |
| 3 | cars | APRIL | 50 |
+-------+-------------+-------+-------+
推荐阅读
- r - How can I provide a location in R shiny where the submitted file should be saved?
- javascript - Issues On JSON File
- amazon-web-services - 是否可以从 AWS Kinesis 流中触发特定的 lambda 函数?
- c++ - How can I sort the vector of pairs when I using a struct in my vector of pairs?
- spring-boot - 为什么 ActiveMQ 中的 @JmsListener 不工作?
- python - npm install 给出错误:[节点版本:16.2.0 和 npm 版本:7.13.0]
- javascript - 在 React 应用程序中找不到错误
- angular - 如何为 animationBuilder.build 方法编写 jasmin/karma 测试用例
- reactjs - 如何在订阅时设置消息样式?反应邮件黑猩猩订阅
- javascript - 当我有滚动捕捉类型时,滚动捕捉剂量工作:y; 在身体标签上