2016-01-25 2 views
0

первый раз постер.ROW_NUMBER() SUB QUERY ISSUE

не программист, просто спотыкаясь о попытке учиться.

По существу, я пытаюсь найти деятельность в течение определенного периода времени.

может быть и будет несколько записей для одного «fileno». Я хочу ограничить это одной записью.

SELECT MASTER.FILENO, MASFORW.FORW_NO, MASTER.FORW_FILENO, 
     MASTER.COCO_FILENO, MASFORW.SORT_FIELD, TRACKUSR.trck_date, 
     TRACKUSR.whoami, TRACKUSR.track, TRACKUSR.rerite, 
     ROW_NUMBER() OVER (PARTITION BY MASTER.FILENO 
          ORDER BY TRACKUSR.TRCK_DATE DESC) AS rownum 
FROM MASFORW 
INNER JOIN MASTER 
     ON MASFORW.FORW_NO = MASTER.FORW_NO 
FULL OUTER JOIN TRACKUSR 
     ON MASTER.FILENO = TRACKUSR.fileno 
WHERE (TRACKUSR.TRCK_DATE >= DATEADD(day, 0, GETDATE())) 
    AND (TRACKUSR.TRCK_DATE < DATEADD(day, 90, GETDATE())) 
    AND (MASFORW.SORT_FIELD = N'CR' OR 
         MASFORW.SORT_FIELD = N'CJ') 
    and (rownum = 1) 
+0

извините, ошибка im получение Msg 207, уровень 16, состояние 1, строка 7 Недопустимое имя столбца 'rownum'. –

ответ

0

создать дополнительный запрос, а затем фильтровать rownum снаружи.

Вы косяк использовать псевдоним на тот же запрос, потому что в тот момент, когда вы проверить, где псевдоним hasnt создан

SELECT * 
FROM (
     SELECT ROW_NUMBER() OVER (PARTITION BY MASTER.FILENO 
           ORDER BY TRACKUSR.TRCK_DATE DESC) AS rownum 
     FROM ... 
    ) as subquery 
WHERE rownum = 1 
0

вы не можете использовать псевдоним в где п ...

есть SQL заявление иерархии ..

  1. из таблицы
  2. где положение
  3. группы по
  4. , имеющие
  5. выберите
  6. заказ

related link

0

Предполагая, что остальная часть запроса в порядке, вы можете устранить ошибку, заменив

and (rownum = 1)  

с

having ROW_NUMBER() OVER (PARTITION BY MASTER.FILENO 
     ORDER BY TRACKUSR.TRCK_DATE DESC) = 1 
+0

Кажется, что 'Windowed функции могут появляться только в предложениях SELECT или ORDER BY''. – Eric