SQL 服务器 Select 其中 stage/sequence 已丢失或顺序错误
SQL Server Select where stage/sequence has been missed or is out of sequence
我有一个 table,它有 families_id
、date
、metric_id
为每个 families_id
插入一条记录,将有一个 date
& metric_id
1-10。
所以每个 families_id
应该有 10 条记录,这些记录被插入一个日期,每个记录应该相互接续。所以 metric_id
10 日期应该大于 metric_id
6 日期。
群发我怎么能select他们那里有
- 错过了
metric_id
metric_id
6 的日期早于 metric_id
2 的日期
使用 row_number 为每个家庭分配 metric_id 和日期的序号,然后它们应该匹配 - 还有 metric_id、1,2,3,4...应该与其计算的 row_number() 相匹配,还有 1,2,3,4....
SELECT IQ.* FROM (SELECT families_id, [date], metric_id,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY [date]) rn_date,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY metricid) rn_metric FROM YourTable) IQ
WHERE IQ.rn_date != IQ.rn_metric;
--should detect wrongly ordered metric_ids
SELECT IQ.* FROM (SELECT families_id, [date], metric_id,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY [date]) rn_date,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY metricid) rn_metric FROM YourTable) IQ
WHERE IQ.metric_id != IQ.rn_metric;
另一种可能性 - 检测日期较早的 metricID 以获得更高的 ID
SELECT y1.families_id, y1.metric_id FROM yourtable y1
WHERE
EXISTS(SELECT 0 FROM yourtable y2 WHERE y1.families_id = y2.families_id
AND
y2.date < y1.date
AND
y2.metricid > y1.metricid)
我有一个 table,它有 families_id
、date
、metric_id
为每个 families_id
插入一条记录,将有一个 date
& metric_id
1-10。
所以每个 families_id
应该有 10 条记录,这些记录被插入一个日期,每个记录应该相互接续。所以 metric_id
10 日期应该大于 metric_id
6 日期。
群发我怎么能select他们那里有
- 错过了
metric_id
metric_id
6 的日期早于metric_id
2 的日期
使用 row_number 为每个家庭分配 metric_id 和日期的序号,然后它们应该匹配 - 还有 metric_id、1,2,3,4...应该与其计算的 row_number() 相匹配,还有 1,2,3,4....
SELECT IQ.* FROM (SELECT families_id, [date], metric_id,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY [date]) rn_date,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY metricid) rn_metric FROM YourTable) IQ
WHERE IQ.rn_date != IQ.rn_metric;
--should detect wrongly ordered metric_ids
SELECT IQ.* FROM (SELECT families_id, [date], metric_id,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY [date]) rn_date,
ROW_NUMBER() OVER (PARTITION BY families_id ORDER BY metricid) rn_metric FROM YourTable) IQ
WHERE IQ.metric_id != IQ.rn_metric;
另一种可能性 - 检测日期较早的 metricID 以获得更高的 ID
SELECT y1.families_id, y1.metric_id FROM yourtable y1
WHERE
EXISTS(SELECT 0 FROM yourtable y2 WHERE y1.families_id = y2.families_id
AND
y2.date < y1.date
AND
y2.metricid > y1.metricid)