SQL在数据更改时选择

时间:2013-12-16 12:03:45

标签: c# sql entity-framework

我想在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#,所以使用它们的建议也会受到赞赏!

感谢。

4 个答案:

答案 0 :(得分:3)

将结果提取到dbResults,然后执行

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

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

您可以在ideone

上查看

答案 1 :(得分:3)

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 :(得分:2)

此方法原则上与@ 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

答案 3 :(得分:1)

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