2016-04-04 29 views
0

için zaman serisi verilerinin toplu olarak birleştirilmesi 5 yıllık verileri içeren bir tabloda büyük bir zaman serisi veri kümesine sahibim. Veriler çok yapılandırılmıştır; Zaman sütununda kümelenmiş/sıralanmıştır ve bu 5 yıllık süre boyunca tam olarak her 10 dakikada bir tam kayıt vardır.Zor: SQL Server tarafında

Kullanıcı tarafındaki uygulamada, 400 piksel genişliğinde bir zaman dizisi grafiğim var ve kullanıcılar zaman ölçeğini 1 saatten 5 yıla kadar ayarlayabilir. Bu nedenle, veritabanına 400'den fazla kayıt döndüren bu grafik tarafından yapılan herhangi bir sorgu, fiziksel olarak görüntülenemeyen veriler sağlar.

Bilmek istediğim; Herhangi biri, veritabanı belirli bir zaman aralığı için sorgulandığında, SQL veritabanının 400'den fazla kayıt döndürmeyen uygun bir ortalama toplama yapmasını sağlayacak bir yaklaşım önerebilir mi?

Örnek 1): zaman aralığı 5 yıl ise, SQL Server her 4.5 gün için ~ 1 değerini hesaplar (5yrs * 365days/400records gereklidir), bu nedenle her 4.5 günlük çöp kutusu için 10 dakikalık örneklerin tümünü ortalar ve her kutu için bir kayıt döndürün. Toplamda yaklaşık 400.

Örnek 2): Zaman aralığı bir ay olsaydı, SQL Server her 1.85 saat (31 gün/400records) için ~ 1 kayıt hesaplardı, böylece her 1.85 saat kutusu için 10 dakikalık örneklerin ortalamasını alır ve her bin için kayıt. Toplamda yaklaşık 400.

İdeal olarak, uygulama perspektifinden statik bir Tablo gibi sorgulanabilen bir çözüm istiyorum.

Önerilen yaklaşımları veya kod parçacıklarını gerçekten takdir ediyorum.

+0

Açıklama: Zaman sütunu, float cinsinden değer sütunlarıyla birlikte datetime2 tipindedir. –

+0

Saldırıyı bilmediğim önemli bir sorun, bin büyüklüğünün istemci tarafından önceden bilinmemesidir. (Pseudocode) sorgusu istemciden formda gelecektir: TimeKey öğesinin startTime ile endTime arasında olduğu theTable öğesindenDeğerleri seçin. Daha sonra aşağıdaki mantığı hesaplamak için SQL server'ı arıyorum: Tamam, bu client \ interface'in sadece 400 kayıtları işleyebildiğini biliyorum, dolayısıyla bu zaman aralığı için sahip olduğum kayıtların sayısı ne olursa olsun ne tür bir toplama yapmalıyım? –

cevap

0

bazı örnekler, (tablo şema yok gibi, sorunuzu oldukça net değil) bir datetime sütunu varsa:

Grouping into interval of 5 minutes within a time range

SELECT/GROUP BY - segments of time (10 seconds, 30 seconds, etc)

Onlar oldukça kolay olmalıdır SQL sunucusuna bağlantı yapmak için, datetime değerlerinizi bir unix zaman damgasına dönüştürmek için detediff'i kullanın ve div için <> 0 işlev parametresiyle round() öğesini kullanın.

+0

İlginç. Tarih saat sütunlarında gruplandırabildiğini fark etmedim. Bunu araştıracak. Teşekkür ederim. –