这个问题适合那些拥有比我更多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子句错了
答案 0 :(得分:2)
没有关键字。这将是一个很好的神奇解决方案,但它不存在,至少部分是因为没有保证的排序(好吧,只有在有ORDER BY时你才可以拥有关键字......)。我可以给你写一个查询,但这需要时间,所以现在我会给你一些步骤,我会回来看看你是否还需要帮助。
找出ORDER BY,否则无法保证订单。如果有时间输入字段,那么这是一个很好的选择或索引,也可以。
学习使用Row_Number。
将表(与Row_Number)进行比较,其中instance1.row - 1 = instance2.row。
答案 1 :(得分:0)
如果product_id是标识列,那么你不能只做product_id - 1吗?换句话说,如果它是连续的,则与使用前一个评论中提到的ROW_NUMBER相同。