2012-03-05 208 views
2

是否有一个选项可以获得最高日期的行而无需加入同一个表并使用max(date)? Top1是否通过desc有效选项排序?SQL Server的最后日期

我使用SQL Server 2000.并且性能很重要。

编辑:

表1:

columns: part - partdesc 

表2:

columns: part - cost - date 


select a.part,partdesc,b.cost 
left join(select cost,part 
      right join(select max(date),part from table2 group by part) maxdate ON maxdate.date = bb.date 
      from table2 bb) b on b.part = a.part 
from table1 

我不知道,如果上述工程的代码,但是这是我不喜欢的查询。在我看来,效率低下。

+4

为什么你不能使用'MAX'日期? 'TOP 1 ORDER BY DATE DESC'将基本上是相同的操作,但可能效率较低,因为它可能会排列整个表格而不是只找到最高值。 – JNK 2012-03-05 14:01:41

+0

@JNK带过滤器的表格将有最多10行。正常2行。从这些行我需要最后的日期。 – BBAA 2012-03-05 14:24:31

+0

如果你只有10行,那么为什么性能还要考虑? – JNK 2012-03-05 14:28:16

回答

1

这是根据您的编辑进行的简化查询。

SELECT 
    a.part, 
    a.partdesc, 
    sub.cost 
FROM 
    Table1 A 
INNER JOIN 
    (SELECT 
     B.part, 
     cost 
    FROM 
     Table2 B 
    INNER JOIN 
     (SELECT 
      part, 
      MAX(Date) as MaxDate 
     FROM 
      Table2 
     GROUP BY 
      part) BB 
     ON bb.part = b.part 
     AND bb.maxdate = b.date) Sub 
    ON sub.part = a.part 

子子查询将有望运行一点点比你目前的版本更快,因为它会每部分价值,为整个查询运行一次,一次也没有。

+0

K,我会与此一起去。谢谢你的帮助。 – BBAA 2012-03-05 15:09:58

1
SELECT TOP 1 columnlist 
FROM table 
ORDER BY datecol DESC 

无疑是一个有效的选择,假设你的datacols足够精确,你得到所需要的结果(换句话说,如果是每天一列,而您日期反映了这一点,那么肯定的。如果是几个每分钟行数,可能不够准确)。

性能取决于您的索引策略和硬件。