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