【问题标题】:SQL Select when data changes [closed]数据更改时的 SQL 选择 [关闭]
【发布时间】:2013-12-16 12:03:45
【问题描述】:

我想在 SQL Select 中检索一个整数值,但仅限于数据更改时,例如:

表格数据:

50 50 50 52 50 30 30 35 30 30 60 65 60 60

现在我想获取这些数据:

50 52 50 30 35 30 60 65 60

执行一个不同的查询,这对我不起作用,因为它会检索:

50 52 30 35 60 65

有什么想法吗?

我正在使用 Entity Framework 和 C#,因此也非常感谢使用它们的建议!

谢谢。

【问题讨论】:

标签: c# sql entity-framework


【解决方案1】:
List<int> list=...;
var result=Enumerable.Range(0, list.Count- 1)
                     .Where(x=> x== list.Count-1 || list[x]!=list[x+1])
                     .Select(x=>list[x]);

【讨论】:

    【解决方案2】:

    将您的结果提取到 dbResults 然后执行

    var results = new List<int>();
    foreach (var element in dbResults)
    {
        if(!results.Any() || results.Last() != element)
        {
            results.Add(element);
        }
    }
    

    int 结果将是没有连续重复的列表

    你可以在ideone查看它

    【讨论】:

      【解决方案3】:

      此方法在原理上类似于@wudzik,但不是每次都检查您的结果列表,它只是将最后一个 int 存储在一个变量中并对其进行检查。

      var result = new List<int>();
      int? previous;
      foreach (var number in data)
      {
          if(!previous.HasValue || number != previous.Value){
          {
              result.Add(number);
              previous = number;
          }
      
      }
      return result
      

      【讨论】:

        【解决方案4】:
        WITH cte as (--cte is your test data
        
        SELECT
            1 id,
            50 value UNION SELECT
            2,
            50 UNION SELECT
            3,
            50 UNION SELECT
            4,
            52 UNION SELECT
            5,
            50 UNION SELECT
            6,
            30 UNION SELECT
            7,
            30 UNION SELECT
            8,
            35 UNION SELECT
            9,
            30 UNION SELECT
            10,
            30 UNION SELECT
            11,
            60 UNION SELECT
            12,
            65 UNION SELECT
            13,
            60 UNION SELECT
            14,
            60
        ),
        temp AS --temp numbers the rows
        ( SELECT
            id,
            value,
            ROW_NUMBER() OVER (ORDER BY id) rowno
        FROM cte
            )
        SELECT
            t2.value
        FROM temp t1
            INNER JOIN temp t2
                ON t1.rowno = t2.rowno - 1 --join to the next row using rownumber
                AND t1.value <> t2.value   --but only return different values
        

        【讨论】:

        • +1 教我一些新东西
        猜你喜欢
        • 2015-11-20
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 2021-06-10
        相关资源
        最近更新 更多