SQL Server:基于最大值忽略行
我在SQL server中有一个表,有两列Eff和Week,如下所示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
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你最初的回答除了问题本身之外,还缺少很多东西,那就是我发表评论的时候。感谢您更新答案并花时间解释问题。