【问题标题】:Return Maximum Value Below Certain Parameter返回某个参数以下的最大值
【发布时间】:2021-11-07 22:23:05
【问题描述】:

我需要填充下面“生产输入”表中的 CalvingDate 字段来计算 DIM。

生产投入

CowID ProductionDate DateCalved DaysInMilk [DIM]
18001 08/10/2021 23/02/2021 168
17158 30/10/2021 ???? ???
17158 23/10/2021 01/10/2021 23
17158 16/10/2021 01/10/2021 15
17158 08/10/2021 01/10/2021 7
17158 07/08/2021 07/08/2020 365

我有一张表格,上面列出了每只动物的产犊日期

产犊日期

CowID DateCalved
18001 23/02/2021
17158 01/10/2021
17158 07/08/2020

基本逻辑是选择最接近ProductionDate但在ProductionDate之前的DateCalved。考虑第 3 行:我的 Sudo 代码将是:“给我 CowID 17158 小于生产日期 30/10/2021 的所有产犊日期的最大值”

如何使用 SQL Server 实现这一点?

【问题讨论】:

    标签: sql sql-server tsql max


    【解决方案1】:

    样本数据:

    create table ProductionInputs (
     CowID int,
     ProductionDate date,
     DateCalved Date,
     DaysInMilk int
    );
    
    create table CalvingDates (
     CowID int,
     DateCalved Date
    );
    
    insert into ProductionInputs 
    (CowID, ProductionDate) values
    (18001,   '2021-10-08'),
    (17158, '2021-10-30'),
    (17158,   '2021-10-23'),
    (17158,   '2021-10-16'),
    (17158,   '2021-10-08'),
    (17158,   '2021-08-07');
    
    insert into CalvingDates 
    (CowID, DateCalved) values
    (18001, '2021-04-23'),
    (17158, '2021-10-01'),
    (17158, '2020-08-07');
    

    更新声明

    UPDATE t
    SET t.DateCalved = ca.DateCalved
      , t.DaysInMilk = DATEDIFF(day, ca.DateCalved, t.ProductionDate) 
    FROM ProductionInputs t
    CROSS APPLY (
      SELECT MAX(d.DateCalved) AS DateCalved
      FROM CalvingDates d 
      WHERE d.CowId = t.CowId
        AND d.DateCalved <= t.ProductionDate
    ) ca
    

    结果

    select * from ProductionInputs;
    
    牛ID |生产日期 |日期卡尔维德 | DaysInMilk ----: | :------------- | :--------- | ---------: 18001 | 2021-10-08 | 2021-04-23 | 168 17158 | 2021-10-30 | 2021-10-01 | 29 17158 | 2021-10-23 | 2021-10-01 | 22 17158 | 2021-10-16 | 2021-10-01 | 15 17158 | 2021-10-08 | 2021-10-01 | 7 17158 | 2021-08-07 | 2020-08-07 | 365

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2021-09-01
      • 2023-01-12
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      相关资源
      最近更新 更多