【问题标题】:SQL Server Select where stage/sequence has been missed or is out of sequenceSQL Server 选择阶段/序列丢失或乱序的位置
【发布时间】:2016-10-27 13:58:17
【问题描述】:

我有一张桌子,上面有families_iddatemetric_id

为每个 families_id 插入一条记录,将有一个 datemetric_id 1-10。

所以每个 families_id 应该有 10 条记录,这些记录会插入一个日期,每个记录都应该相互跟随。所以metric_id 10 日期应该大于metric_id 6 日期。

大规模我如何选择他们拥有的地方

  1. 错过了metric_id
  2. metric_id 6 的日期早于metric_id 2 的日期

【问题讨论】:

  • 您能否展示一些示例数据以及您迄今为止尝试过的内容?
  • 这里是一些样本数据 FID MID 日期 0 1 2014-02-21 1 1 2003-09-19 1 9 2015-02-05 1 10 2004-02-05 2 1 2002-07- 19 2 10 2002-11-25 3 1 2002-11-19 3 2 2003-02-13 4 7 2003-04-24 4 8 2005-10-13 4 9 2004-10-12当 metric_id 位于其上方时,适用于彼此之前的日期
  • 你能把样本数据放在你的问题中吗? cmets 不对其进行格式化,因此它完全可用。
  • 同时显示您的 CTE 查询。

标签: sql-server select sequence stage


【解决方案1】:

使用 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)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多