2014-10-02 101 views
1

我试图获取客户的最后一个状态。通过浏览的例子,我已经把这个查询,其工作方式:SQL Server语法错误在子查询中的位置附近

SELECT table.Card, 
    table.Type, 
    table.Date, 
    ROW_NUMBER() OVER 
     (PARTITION by table.CARD ORDER BY table.date DESC, table.TYPE, table.DATE) rn 
FROM table 
WHERE table.Type = 'active' or table.Type = 'erased' 

从那里,我只是需要那些记录,RN = 1,但只要我尝试使用ITAS子查询,如下图所示,我得到一个语法错误:

SELECT * FROM (
    SELECT table.Card, 
     table.Type, 
     table.Date, 
     ROW_NUMBER() OVER 
      (PARTITION by table.CARD ORDER BY table.date DESC, table.TYPE, table.DATE) rn 
    FROM table 
    WHERE table.Type = 'active' or table.Type = 'erased' 
) WHERE rn=1 

它必须简单我只是想念,但我完全困惑。任何帮助将不胜感激。

+2

您的子查询需要别名。 ')AS x WHERE rn = 1;' – 2014-10-02 19:10:12

回答

2

您应该为INNER选择分配一个别名。尝试这个。

SELECT * FROM (
    SELECT table.Card, 
     table.Type, 
     table.Date, 
     ROW_NUMBER() OVER 
      (PARTITION by table.CARD ORDER BY table.date DESC, table.TYPE, table.DATE) rn 
    FROM table 
    WHERE table.Type = 'active' or table.Type = 'erased' 
) foo WHERE rn=1 
+0

谢谢!它像一个魅力。 – 2014-10-02 19:22:15

+0

我很高兴。如果它适合你,请接受答案。请记住,如果您在子查询中使用别名,那么您可以使用该别名将其与其他一些表加入:) – 2014-10-02 19:22:50