使用 SQL,我可以遍历复合键上的表以查找特定数据并计算新值吗?

Posted

技术标签:

【中文标题】使用 SQL,我可以遍历复合键上的表以查找特定数据并计算新值吗?【英文标题】:Using SQL, can I iterate through a table on a composite key to find specific data and compute new values? 【发布时间】:2021-08-13 19:53:07 【问题描述】:

如果我有一个包含订单号和时间戳的复合键的数据集,我可以遍历时间戳以搜索特定时间的数据值吗?例如,我想遍历特定的订单号,直到找到包含 BOL 的第一个时间戳,然后将该日期记录插入到新表中。一般来说,我试图在订单的“生命周期”中找到事件之间的天数。

示例数据:

| Order | Timestamp        | BOL     |
| ------| ----------       |---------|
| 12345 | 05.25.21.05:00   |null     |
| 12345 | 05.26.21.05:00   |512345   |
| 67890 | 05.25.21.05:00   |null     |
| 67890 | 05.26.21.05:00   |556725   |

伪代码:

SET @i=0;   
while(i<size(order.timestamps()))  
    if(order.timestamp[i].BOL is NULL)
        i++;
    else
        order.bolDate = order.timestamp(i);
        exit;

感谢您的帮助,即使它只是一个链接!

【问题讨论】:

你想要什么结果? |订购 |大胆的 | | ------| ---------- | | 12345 | 05.26.21.05:00 | | 67890 | 05.26.21.05:00 | 使用 Alteryx:(1)按分组字段(订单号)和时间戳排序; (2) 使用Multi-Row Formula计算“row”和“row -1”时间戳之间的DateDiff;并按订单号分组。 【参考方案1】:

嗯,好像你想这样做,这样你就不需要迭代了:

insert into newtable (<column list>)
select  order , timestamp , bop 
from ( select * , row_number() over (partition by Order order by timestamp) rn 
 from dataTable
where BOP is not null 
) t 
where rn = 1

上面的查询找到每个有BOP的订单的最早时间戳,可以直接将数据插入到新表中。

【讨论】:

以上是关于使用 SQL,我可以遍历复合键上的表以查找特定数据并计算新值吗?的主要内容,如果未能解决你的问题,请参考以下文章

从未知数据库 SQL 和 Java 中查找外键

复合主键上的慢连接

如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?

主键上的非聚集索引?

在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]

Spring JPA 在嵌入的复合键上使用 @MapsId、@AttributeOverride 时插入重复的选择列