首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何得到客户最近的5次约会?

问如何得到客户最近的5次约会?
EN

Stack Overflow用户
提问于 2022-11-30 20:03:37
回答 2查看 35关注 0票数 -1

我在18中有一个查询,我试图显示每个客户的5个最新日期。

下面是我使用的查询:

代码语言:javascript
复制
SELECT 
    Customer, Plant, ForecastDate  
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER (PARTITION BY Plant, ForecastDate ORDER BY Customer DESC) AS ROW_NUM 
     FROM 
         table) AS T
WHERE 
    ROW_NUM = 1 

以下是此查询的输出:

​

​

这就是我希望输出的样子:

​

​

这是一些可消耗样本数据

我正在处理的每周预测,我的客户给我的变化,每周左右。我将数据上传到Server中。我正试图比较和对比其他预测日期的数量。这就是为什么我想要过去的5次约会。我有多行在同一天,但我也需要过去的日期,因为我试图比较过去的预测彼此。

EN

回答 2

Stack Overflow用户

发布于 2022-11-30 20:23:47

你走在正确的轨道上。

代码语言:javascript
复制
DECLARE @Data TABLE (Customer VARCHAR(3), Plant NVARCHAR(20), ForcastDate DATE)
INSERT INTO @Data (Customer, Plant, ForcastDate) VALUES
('ACA', '1100', '2022-11-21'),('ACA', '1100', '2022-11-22'),('ACA', '1100', '2022-11-23'),('ACA', '1100', '2022-11-24'),('ACA', '1100', '2022-11-25'),
('ACA', '1200', '2022-11-21'),('ACA', '1200', '2022-11-22'),('ACA', '1200', '2022-11-23'),('ACA', '1200', '2022-11-24'),('ACA', '1200', '2022-11-25'),
('ACA', '1300', '2022-11-21'),('ACA', '1300', '2022-11-22'),('ACA', '1300', '2022-11-23'),('ACA', '1300', '2022-11-24'),('ACA', '1300', '2022-11-25'),
('ACA', '1400', '2022-11-21'),('ACA', '1400', '2022-11-22'),('ACA', '1400', '2022-11-23'),('ACA', '1400', '2022-11-24'),('ACA', '1400', '2022-11-25'),
('ACA', '1500', '2022-11-21'),('ACA', '1500', '2022-11-22'),('ACA', '1500', '2022-11-23'),('ACA', '1500', '2022-11-24'),('ACA', '1500', '2022-11-25'),
('ACA', '1600', '2022-11-21'),('ACA', '1600', '2022-11-22'),('ACA', '1600', '2022-11-23'),('ACA', '1600', '2022-11-24'),('ACA', '1600', '2022-11-25'),
('ACA', '1700', '2022-11-21'),('ACA', '1700', '2022-11-22'),('ACA', '1700', '2022-11-23'),('ACA', '1700', '2022-11-24'),('ACA', '1700', '2022-11-25'),
('ACA', '1100', '2022-11-25'),('ACA', '1100', '2022-11-27'),('ACA', '1100', '2022-11-28'),('ACA', '1100', '2022-11-29'),('ACA', '1100', '2022-11-30'),
('ACA', '1200', '2022-11-25'),('ACA', '1200', '2022-11-27'),('ACA', '1200', '2022-11-28'),('ACA', '1200', '2022-11-29'),('ACA', '1200', '2022-11-30'),
('ACA', '1300', '2022-11-25'),('ACA', '1300', '2022-11-27'),('ACA', '1300', '2022-11-28'),('ACA', '1300', '2022-11-29'),('ACA', '1300', '2022-11-30'),
('ACA', '1400', '2022-11-25'),('ACA', '1400', '2022-11-27'),('ACA', '1400', '2022-11-28'),('ACA', '1400', '2022-11-29'),('ACA', '1400', '2022-11-30'),
('ACA', '1500', '2022-11-25'),('ACA', '1500', '2022-11-27'),('ACA', '1500', '2022-11-28'),('ACA', '1500', '2022-11-29'),('ACA', '1500', '2022-11-30'),
('ACA', '1600', '2022-11-25'),('ACA', '1600', '2022-11-27'),('ACA', '1600', '2022-11-28'),('ACA', '1600', '2022-11-29'),('ACA', '1600', '2022-11-30'),
('ACA', '1700', '2022-11-25'),('ACA', '1700', '2022-11-27'),('ACA', '1700', '2022-11-28'),('ACA', '1700', '2022-11-29'),('ACA', '1700', '2022-11-30')

为了便于移植,这只是表变量中的一些示例数据。

代码语言:javascript
复制
SELECT *
  FROM 
       (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Customer, Plant ORDER BY ForcastDate DESC) AS rn
          FROM @Data
       ) a
 WHERE rn <= 5

我不知道你想要的是最近的五天每一家工厂,还是仅仅每个客户。这是每个客户和工厂。

代码语言:javascript
复制
SELECT *
  FROM 
       (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY ForcastDate DESC) AS rn
          FROM @Data
       ) a
 WHERE rn <= 5

这是给每位顾客的。注意现在分区BY只包含Customer。

票数 0
EN

Stack Overflow用户

发布于 2022-11-30 21:22:51

用一个视图算出来的。这样,它删除了具有相同日期的多行。下面是我使用的代码:

代码语言:javascript
复制
SELECT Customer, Plant, ForecastDate
  FROM 
       (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Customer, Plant ORDER BY ForecastDate DESC) AS rn
          FROM View
       ) a
WHERE rn <= 5
order by Customer,Plant,ForecastDate desc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74633538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档