使用 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 Server 中填充我的日期维度表以获得具有此特定值的列?