2

是否可以在不加入同一张表的情况下获取日期最高的行并使用 max(date) ?按 desc 排序的 Top1 是有效选项吗?

我使用 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

2 回答 2

1
SELECT TOP 1 columnlist
FROM table
ORDER BY datecol DESC 

肯定是一个有效的选择,假设您的数据足够精确,您可以获得所需的结果(换句话说,如果它是每天一行,并且您的日期反映了这一点,那么可以确定。如果它是每分钟几行,您可能不会足够精确)。

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

于 2012-03-05T14:01:47.890 回答
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

子子查询有望比您当前的版本运行得快一点,因为它将为整个查询运行一次,而不是每个部分值运行一次。

于 2012-03-05T15:00:03.027 回答