SQL Server:基于最大值忽略行

SQL Server:基于最大值忽略行,sql,sql-server,date,Sql,Sql Server,Date,我在SQL server中有一个表,有两列Eff和Week,如下所示 Eff Week 2014-01-11 2014-01-11 2014-01-11 2014-01-18 2014-01-11 2014-01-25 2014-01-25 2014-01-25 2014-01-11 2014-02-01 2014-01-25 2014-02-01 2014-01-11 2014-02-08 2014-01-25 2014-02-08 2014-01-11

我在SQL server中有一个表,有两列Eff和Week,如下所示

 Eff           Week
2014-01-11  2014-01-11
2014-01-11  2014-01-18
2014-01-11  2014-01-25
2014-01-25  2014-01-25
2014-01-11  2014-02-01
2014-01-25  2014-02-01
2014-01-11  2014-02-08
2014-01-25  2014-02-08
2014-01-11  2014-02-15
2014-01-25  2014-02-15
2014-01-11  2014-02-22
2014-01-25  2014-02-22
2014-01-11  2014-03-01
2014-01-25  2014-03-01
2014-02-28  2014-03-01
2014-01-11  2014-03-08
2014-01-25  2014-03-08
2014-02-28  2014-03-08
2014-01-11  2014-03-15
2014-01-25  2014-03-15
2014-02-28  2014-03-15
Eff           Week
2014-01-11  2014-01-11
2014-01-11  2014-01-18
2014-01-25  2014-01-25
2014-01-25  2014-02-01
2014-01-25  2014-02-08
2014-01-25  2014-02-15
2014-01-25  2014-02-22
2014-02-28  2014-03-01
2014-02-28  2014-03-08
2014-02-28  2014-03-15
我想从这个表中创建一个查询,该查询将忽略一些行,并且只输出一个包含一次星期日期的表,但Eff日期可能会重复。基本上,它应该选择一周内最大或最新的生效日期。新表格应如下所示:

 Eff           Week
2014-01-11  2014-01-11
2014-01-11  2014-01-18
2014-01-11  2014-01-25
2014-01-25  2014-01-25
2014-01-11  2014-02-01
2014-01-25  2014-02-01
2014-01-11  2014-02-08
2014-01-25  2014-02-08
2014-01-11  2014-02-15
2014-01-25  2014-02-15
2014-01-11  2014-02-22
2014-01-25  2014-02-22
2014-01-11  2014-03-01
2014-01-25  2014-03-01
2014-02-28  2014-03-01
2014-01-11  2014-03-08
2014-01-25  2014-03-08
2014-02-28  2014-03-08
2014-01-11  2014-03-15
2014-01-25  2014-03-15
2014-02-28  2014-03-15
Eff           Week
2014-01-11  2014-01-11
2014-01-11  2014-01-18
2014-01-25  2014-01-25
2014-01-25  2014-02-01
2014-01-25  2014-02-08
2014-01-25  2014-02-15
2014-01-25  2014-02-22
2014-02-28  2014-03-01
2014-02-28  2014-03-08
2014-02-28  2014-03-15

有什么建议吗?

你是指每周的最长生效日期吗

SELECT
  week,
  MAX(eff)   AS max_eff
FROM
  yourTable
GROUP BY
  week
ORDER BY
  week
分组依据
获取具有相同
的所有行,并将其向下处理为一行输出。(无论每周有多少输入行,每周都有一个输出行。)

然后,
MAX(eff)
允许您在每个组中选择
eff
的最高值

“排序依据”只是对输出进行排序,它不会以任何方式影响结果。

尝试以下方法:

SELECT MAX(Eff) Eff,Week FROM TABLE1 GROUP BY WEEK;
这是你需要的吗

SELECT
  MAX(eff) AS MaxEff,
  MIN(eff) AS MinEff,
  week
FROM
  TableDates
GROUP BY 
  week
ORDER BY
  week ASC;

试试这个,输出是一样的

select * from
(select *,
ROW_NUMBER()over(partition by datepart(wk,weeks)order by Eff desc)rn from @t
)t4
where rn=1

所以你试过什么?我们不会只是给你你需要的查询。你需要向我们展示你已经付出了一些努力。不过,看起来好像其他人已经决定给你一条鱼比教你如何自己捕鱼更好。@BrianDriscoll-除了我努力解释这个问题,以便他们有机会理解并改天重新应用它。也就是说,请吃我的鱼,它是用柠檬和香草烤的,味道好极了,我希望它能让你的味蕾起舞,让你的一天感觉好一点:)@BrianDriscoll我同意你的看法,但是总会有人(包括我自己)当这条鱼很容易从地上捡起来的时候,谁愿意为了一小笔钱把它送给别人呢。出于某种原因,这些问题有最好的回报。当我们花几个小时回答一个问题时,我们通常得不到任何分数。@MatBailie你最初的回答除了问题本身之外,还缺少很多东西,那就是我发表评论的时候。感谢您更新答案并花时间解释问题。