假设我有下一个SQL表,包含以下示例值:
ID Date User Publish
----------------------------------
1 05/20/16 Peter 1
2 05/20/16 Peter 2 <= Discarded
3 05/20/16 John 2
4 05/28/16 John 1
5 05/28/16 John 2 <= Discarded
6 07/01/16 Peter 2
7 07/01/16 John 2
我想要获得的是一个选择所有行的查询,但是如果同一日期和用户有两行,请使用&#39;发布&#39;值为&#39; 1&#39;,所以在示例中我得到行1,3,4,6和7。
我以编程方式解决了这个问题,但我想知道是否存在一种通过正确的SQL查询解决问题的方法。
任何帮助将不胜感激。
答案 0 :(得分:1)
对于publish
和date
的每一组,这将丢弃第一行(按user
排序)以外的所有内容:
SELECT ID, "Date", User, Publish
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY "Date", User ORDER BY Publish ) AS rn
FROM table_name t
)
WHERE rn = 1;