TSQL关键字上一个或最后一个或类似的东西

时间:2012-12-12 15:39:09

标签: tsql ssms-2012

这个问题适合那些拥有比我更多SQL经验的人。

我正在编写一个查询(最终将是一个存储过程,但这应该是无关紧要的),如果最近的条目等同于之前输入的条目,我想要选择行数。我想继续这样做,直到它遇到具有不同值的条目。 (说得不好,所以我会举例说明)

在我的表格中,我有一个专栏' Product_Id'当运行此查询时,我希望它采用product_id并将其与先前输入的产品ID进行比较,如果它与我想添加的产品相同,我希望它继续检查先前输入的product_id,直到它遇到不同的product_id

我希望听起来比这更复杂,查询看起来像

Select count(Product_ID)
FROM dbo.myTable
Where Product_Id = previous(Product_Id)

现在,我知道以前不是TSQL中的关键字,也不是Last,但我希望有人知道关键字能够满足我的要求。

  • 编辑Sam

     USE DbName;
     GO
    WITH OrderedCount as
    (
    select ROW_NUMBER() OVER (Order by dbo.Line_Production.Run_Date DESC) as RowNumber,
    Line_Production.Product_ID
    From dbo.Line_Production
    )
    Select RowNumber, COUNT(OrderedCount.Product_ID) as PalletCount
    From OrderedCount
    WHERE OrderedCount.RowNumber + 1 = RowNumber
    and Product_ID = Product_ID
    Group by RowNumber
    

OrderedCount部分有效,并且它返回数据我想要的方式,我现在无法比较不同RowNumbers的Product_ID

我的Where子句错了

2 个答案:

答案 0 :(得分:2)

没有关键字。这将是一个很好的神奇解决方案,但它不存在,至少部分是因为没有保证的排序(好吧,只有在有ORDER BY时你才可以拥有关键字......)。我可以给你写一个查询,但这需要时间,所以现在我会给你一些步骤,我会回来看看你是否还需要帮助。

  1. 找出ORDER BY,否则无法保证订单。如果有时间输入字段,那么这是一个很好的选择或索引,也可以。

  2. 学习使用Row_Number

  3. 将表(与Row_Number)进行比较,其中instance1.row - 1 = instance2.row。

答案 1 :(得分:0)

如果product_id是标识列,那么你不能只做product_id - 1吗?换句话说,如果它是连续的,则与使用前一个评论中提到的ROW_NUMBER相同。