Запрос для сбора данных из предыдущих строк - PullRequest
0 голосов
/ 24 июня 2010

У меня есть таблица с записями, например, под CO.Nr приведены данные TH-123, Th-456 и т. Д. Мне нужно собрать данные ..

Nr.       CO.Nr           Employee       Resp            Description       Date

1         TH-123          ABC            NULL              HELLO           10.05.2010
2         TH-123          NULL           S14               NULL            18.05.2010
3         TH-123          DEF                              NULL            13.05.2010
4         TH-456          XYZ            NULL              NULL             1.07.2010
5         TH-456          NULL           S19               SOME             NULL
6         TH-456                                           TEXT            08.05.2010
7         TH-456                        NULL                               28.05.2010

Для TH-123, если Nr.является максимальным, это запись, которую мне нужно начать с группы по CO.Nr, поэтому это запись с Nr, равным 3, если значение в других столбцах равно NULL или пробелу, перейдите к записи выше, то есть записи сNr как 2, даже если он имеет нулевое значение, перейти к записи выше этой записи с Nr.как 1 в этом случае.В 3 записях мне нужно взять максимум даты.Для приведенных выше данных мне нужно, чтобы вывод:

      CO.Nr           Employee       Resp            Description       Date

      TH-123          DEF            S14               HELLO            18.05.2010
      TH-456          XYZ            S19               TEXT             01.07.2010

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Вы можете сделать это многими способами

select [co.nr],
(select top(1) employee from mytable b where b.[co.nr]=a.[co.nr]  and 
                        employee is not null order by nr desc) as employee,
(select top(1) resp from mytable b where b.[co.nr]=a.[co.nr]  and 
                        resp is not null order by nr desc) as resp,
(select top(1) description from mytable b where b.[co.nr]=a.[co.nr]  and 
                        description is not null order by nr desc) as description,
(select max([date]) from mytable b  where b.[co.nr]=a.[co.nr]) as Date
from (
select distinct [co.nr] 
 from mytable ) as a
0 голосов
/ 24 июня 2010

Вы можете использовать подвыбор, чтобы выбрать нужную запись, а затем присоединиться к ней. Что-то вроде следующего для сотрудников (оставлю остальные столбцы в качестве упражнения):

SELECT MyTable.[CO.Nr], Employees.Employee
FROM MyTable
LEFT OUTER JOIN (SELECT FIRST(Employee) as Employee, [CO.Nr]
                 FROM MyTable
                 WHERE Employee IS NOT NULL AND Employee <> ''
                 GROUP BY [CO.Nr]
                 ORDER BY [Nr.] DESC) Employees 
           ON MyTable.[CO.Nr] = Employees.[CO.Nr]
GROUP BY MyTable.[CO.Nr]

Или, если FIRST() не является допустимой статистической функцией, как упоминалось в ваших комментариях, вы можете попробовать выполнить подвыборы в предложении SELECT, например:

SELECT t.MyTable.[CO.Nr], 
       (SELECT TOP(1) x.Employee
        FROM MyTable x
        WHERE x.[CO.Nr] = t.[CO.Nr]
        AND x.Employee IS NOT NULL AND x.Employee <> ''
        ORDER BY [Nr.] DESC) as Employee
FROM MyTable t
GROUP BY t.[CO.Nr]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...