2016-01-25 83 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

对不起,我得到的错误是消息207,级别16,状态1,行7 无效的列名'rownum'。 –

回答

0

创建子查询,然后过滤rownum外部。

你在相同的查询不能使用别名,因为在那一刻你检查,其中别名处理不当创建

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

你不能在where子句中使用别名...

有一个SQL语句层次..

  1. 从表
  2. where子句
  3. 组由
  4. 具有
  5. 通过

related link

0

选择

  • 顺序假设该查询的其余部分是好了,可以通过更换

    and (rownum = 1)  
    
    清除错误

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

    看来'窗口函数只能出现在SELECT或ORDER BY子句中.' – Eric