Sql server 选择在特定日期具有多个ID的所有行

Sql server 选择在特定日期具有多个ID的所有行,sql-server,Sql Server,我的桌子: Items | Price | UpdateAt 1 | 2000 | 02/02/2015 2 | 4000 | 06/04/2015 3 | 2150 | 07/05/2015 4 | 1800 | 07/05/2015 5 | 5540 | 08/16/2015 4 | 1700 | 12/24/2015 5 | 5200 | 12/26/2015 2

我的桌子:

Items   | Price  |  UpdateAt
  1     |  2000  | 02/02/2015
  2     |  4000  | 06/04/2015
  3     |  2150  | 07/05/2015
  4     |  1800  | 07/05/2015
  5     |  5540  | 08/16/2015
  4     |  1700  | 12/24/2015
  5     |  5200  | 12/26/2015
  2     |  3900  | 01/01/2016
  4     |  2000  | 06/14/2016
如您所见,这是一个表,用于保存项目的价格以及上次更新前的旧价格

现在我需要找到以下行:

UpdateAt是一年多以前的事了 此后必须至少更新一次价格 这不是最新的价格吗 因此,在这些条件下,上表得出的结果应为:

Items   | Price  |  UpdateAt
  2     |  4000  | 06/04/2015
  4     |  1800  | 07/05/2015
我可以用这个实现我所需要的

Declare @LastUpdate date set @LastUpdate = DATEADD(YEAER, -1, GETDATE())
select Items, UpdateAt from ITEM_PRICE where Items in (
    select Items from (
       select Items, count(Items) as C from ITEM_PRICE group by Items) T
    where T.C > 1) 
and UpdateAt < @LastUpdate
但是,由于我还是sqlserver的新手,这需要在vb.net中完成,因此在其中传递带有大量select的查询似乎很草率,也很难维护

所以,我想问,是否有人能给我一个更简单的解决方案

抱歉,我编辑了我的问题,因为我需要在尝试@Tim Biegeleisen的答案后满足另一个条件,这确实是编辑前问题的正确答案。我再也弄不明白了


为什么我需要所有这些条件,是因为我必须清理表:清除超过1年的数据,同时仍然保持最新的商品价格。

在我下面的回答中,我使用子查询来标识表中去年出现的所有商品。这是至少更新一次价格的要求。在外部查询中,我仅限于从现在起超过一年的记录,这是需求的另一部分。使用内部联接,因为我们要过滤不满足这两个条件的记录

SELECT t1.Items, t1.Price, t1.UpdateAt
FROM ITEM_PRICE t1
INNER JOIN
(
    SELECT DISTINCT Items
    FROM ITEM_PRICE
    WHERE UpdateAt > DATEADD(year, -1, GETDATE())
) t2
    ON t1.Items = t2.Items
WHERE t1.UpdateAt <= DATEADD(year, -1, GETDATE())
SQL Fiddle再次在模拟SQL Server时遇到问题。但我继续在MySQL中创建了一个小提琴,它看起来与我的SQL Server答案几乎相同。您可以验证逻辑和输出是否正确


第2项仅更新一次,您的预期结果如何?第3项在最近一年中从未更新过,至少在您向我们展示的样本数据中没有更新。@GameIswar第2项在2015年4月6日更新一次,从现在起超过1年,它在2016年1月1日再次更新,因此结果中应显示2015年4月6日的行。@Tim Biegeleisen是的,不应显示第3项。我的错误。在此之前,我将编辑我的问题。很抱歉,我不能尽快回复。是的,你的答案是正确的,得到了我想要的结果,它也比我的好。我试过你的答案,但它又让我陷入了另一种情况。。当我编辑我的问题时,筛选出最新的价格。当我试图弄明白的时候,我希望你能多花点时间来帮助我。我不明白你的新要求是什么,因为没有样本数据显示它,或者样本输出没有改变。你可能想发布一个新问题,而不是多次修改这个问题。我按照你的建议做了,并添加了一个更清晰的问题[。我希望你也能在那里与我分享一些想法。