在一天的大部分时间里,我一直在努力寻找答案,但没有运气。
我有一个包含样品测量数据的SQL表,我需要一种为每个样品分配唯一ID的方法。现在,每个样本都有一个ID编号,该编号会频繁滚动。我需要的是每个样本的唯一ID。下面是带有简化数据集的表格,以及可能满足我需要的UID的示例。
| Row | Time | Meas# | Sample# | UID (Desired) |
| 1 | 09:00 | 1 | 1 | 1 |
| 2 | 09:01 | 2 | 1 | 1 |
| 3 | 09:02 | 3 | 1 | 1 |
| 4 | 09:07 | 1 | 2 | 2 |
| 5 | 09:08 | 2 | 2 | 2 |
| 6 | 09:09 | 3 | 2 | 2 |
| 7 | 09:24 | 1 | 3 | 3 |
| 8 | 09:25 | 2 | 3 | 3 |
| 9 | 09:25 | 3 | 3 | 3 |
| 10 | 09:47 | 1 | 1 | 4 |
| 11 | 09:47 | 2 | 1 | 4 |
| 12 | 09:49 | 3 | 1 | 4 |
我的问题是,第10-12行与第1-3行具有相同的Sample#。我需要一种唯一标识和分组每个样本的方法。在样品上具有第一次测量的行号或时间会很好。
另一个复杂之处在于,测量编号并不总是以1开头。它是基于测量位置的,有时会跳过位置1,而仅包含位置2和3。
答案 0 :(得分:1)
我要推测您想要为每个样本分配一个唯一的编号,现在您可以在其中重复。
如果是这样,您可以使用lag()
和累计金额:
select t.*,
sum(case when prev_sample = sample then 0 else 1 end) over (order by row) as new_sample_number
from (select t.*,
lag(sample) over (order by row) as prev_sample
from t
) t;