Sütunlar date_trans, time_trans, price içeren bir tablom var. Seçim sorgusundan sonra, fiyat sütununun ardışık olarak eşit değerleri olarak hesaplanacak olan yeni bir sütun "Count" eklemek istiyorum ve ardışık olarak eşit fiyatlara sahip olan önceki satırlar nihai sonuçtan kaldırılacak. Milyonlarca seçerken ben bir seçme sorgusu ve seçilen tüm satırları döngü olmak yapabilir,Bir sorguyu optimize edin veya LINQ ürününü tavsiye edin
date_trans time_trans price **Count**
2011-02-22 09:39:59 58.02 1
2011-02-22 09:40:03 58.1 *ROW WILL BE REMOVED
2011-02-22 09:40:07 58.1 *ROW WILL BE REMOVED
2011-02-22 09:40:08 58.1 3
2011-02-22 09:40:10 58.15 1
2011-02-22 09:40:10 58.1 *ROW WILL BE REMOVED
2011-02-22 09:40:14 58.1 2
2011-02-22 09:40:24 58.15 1
2011-02-22 09:40:24 58.18 *ROW WILL BE REMOVED
2011-02-22 09:40:24 58.18 *ROW WILL BE REMOVED
2011-02-22 09:40:24 58.18 3
2011-02-22 09:40:24 58.15 1
Şu tablodan seçmek için bir sql sorgu veya LINQ ifadesini önerin ama: beklenen çıkışı Bkz satırlar saat sürer.
Benim geçerli kod: ilginç biri
string query = @"SELECT date_trans, time_trans, price
FROM tbl_data
WHERE date_trans BETWEEN '2011-02-22' AND '2011-10-21'
AND time_trans BETWEEN '09:30:00' AND '16:00:00'";
DataTable dt = oUtil.GetDataTable(query);
DataColumn col = new DataColumn("Count", typeof(int));
dt.Columns.Add(col);
int priceCount = 1;
for (int count = 0; count < dt.Rows.Count; count++)
{
double price = Convert.ToDouble(dt.Rows[count]["price"]);
double priceNext = (count == dt.Rows.Count - 1) ? 0 : Convert.ToDouble(dt.Rows[count + 1]["price"]);
if (price == priceNext)
{
priceCount++;
dt.Rows.RemoveAt(count);
count--;
}
else
{
dt.Rows[count]["Count"] = priceCount;
priceCount = 1;
}
}
SQL'de analitik işlevlerle mümkün olduğunu düşünüyorum. Geç oldu, bu yüzden beynim artık hepsini işleyemiyor, ama dinlendiğimde, geri dönüp hala bir cevaba ihtiyacınız olup olmadığını göreceğim. Ama bence bu yanıtı (http://stackoverflow.com/questions/7854854/getting-all-consecutive-rows-differing-by-certain-value) ve analitik fonksiyonları nasıl kullandığını görerek başlamalıyız. – Ally