周结束日期,按数量排列的前20项工作不正常



我讨厌SQL Server查询(尤其是那些有日期的查询),我正在寻找返回记录集的帮助。基本上,我的任务是在最近的一周结束日期前按数量退回前20件物品。如果最近的周末日期只有3个项目,我只需要返回这3条记录。

字段:

WeekEndDate, Quantity, ItemNo

以下是我迄今为止所尝试的。。。

select top (20) t.Item, t.WeekEndDate, t.Quantity
from ItemTable t where t.Quantity > 0 
inner join (
    select  max(WeekEndDate) as MaxDate
    from ItemTable it      
) on t.WeekEndDate = it.MaxDate
order by t.Quantity desc

我想我错过了另一个加入,或者最多只返回20条记录,而不是总是返回20条。提前感谢。。。

正如我在评论中提到的,正确的语法是:

select top (20) t.Item, t.WeekEndDate, t.Quantity
from ItemTable t inner join
     (select  max(WeekEndDate) as MaxDate
      from ItemTable it      
     )
     on t.WeekEndDate = it.MaxDate
where t.Quantity > 0 
order by t.Quantity desc;

如果您知道最近的日期至少有20条记录,则可以消除join:

select top (20) t.Item, t.WeekEndDate, t.Quantity
from ItemTable t
where t.Quantity > 0 
order by t.WeekendDate, t.Quantity desc;

当然,如果记录少于20条,那么你会得到另一天的记录。

最新更新