【问题标题】: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