Вопрос : Подсчитайте последовательные значения в сервере 2005 MS SQL

Мне нужен вопрос оптимизирован возвратит самый последний число последовательных значений или a, b или c personid.

например, поля являются следующими:

PersonID, mydate, a, b, C

A, b, c или будет NULL или 1.  Также, только одно из этих может иметь 1 одновременно (другие значения будут НУЛЕВЫ для каждого рядка).  Mydate обязательно не приказано но нам нужны самые последние последовательные данные по count.

Sample:

PersonID, mydate, a, b, C
================
1, 2010-04-22, 1, NULL, NULL
1, 2010-04-18, 1, NULL, NULL
1, 2010-04-21, 1, NULL, NULL
2, 2010-04-18, NULL, 1, NULL
1, 2010-04-14, 1, NULL, NULL
1, 2010-04-15, NULL, 1, NULL
2, 2010-04-15, 1, NULL, возвращение NULL

Would:

PersonID, ConsecType, ConsecCount
======================
1, a, 3
2, b, 1

The ConsecType обязательно не нужно быть имя поля… возможно, котор оно smogло использовать заявление случая или что-то более эффективное для того чтобы определить существование того value.

I думает MS-SQL 2005 приходит с некоторыми более новыми характеристиками как ROW_NUMBER, CTE, ПЕРЕГОРОДКА, etc. которое могут мочь разрешить это более легкое.  Я не видел много примеров вне там но никакие легк переносимо (хотя бы к мне!).  Они также кажется, что общают с последовательными значениями 2 типов (обычно 0 или 1)… тогда как это имеет 3… или потенциальн больше.  Оно был бы больш прийти вверх с разрешением в smogло быть типы n бинарного значения (1 или NULL).

The более эффективное вопрос для больших datasets, лучшего!

Thanks!
class=

Ответ : Подсчитайте последовательные значения в сервере 2005 MS SQL

огорченный b не должен иметь напечатать внутри группу на машинке…

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
; с основанием как (
выберите a.*, row_number () над (перегородка заказом (personid) desc mydate) как rn
, случай когда a.a не будет нулевой после этого «a»
                     когда a.b не будет нулевым после этого «b»
                      еще конец «c» как тип
от mytable как a
)
выберите a.personid, a.type
      , случай a.type когда «a» 
            после этого случай когда b.minb  < b="">
           
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us