sql问题:相同id情况下,如何按时间逆序取符合条件的第一条数据。
IDFIDValueTime12010000211100003122000042290005401000063210000查询相同FID情况下,如果有Value>0的记录...
ID FID Value Time
1 2 0 10000
2 1 1 10000
3 1 2 20000
4 2 2 9000
5 4 0 10000
6 3 2 10000
查询相同FID情况下,如果有Value>0的记录,则按Time desc顺序取本组第一条Value>0的记录。如果没有,按Time desc顺序取本组第一条Value=0的记录。结果按FID顺序排列
则查询结果应为:
ID FID Value Time
3 1 2 20000
4 2 2 9000
6 3 2 10000
5 4 0 10000 展开
1 2 0 10000
2 1 1 10000
3 1 2 20000
4 2 2 9000
5 4 0 10000
6 3 2 10000
查询相同FID情况下,如果有Value>0的记录,则按Time desc顺序取本组第一条Value>0的记录。如果没有,按Time desc顺序取本组第一条Value=0的记录。结果按FID顺序排列
则查询结果应为:
ID FID Value Time
3 1 2 20000
4 2 2 9000
6 3 2 10000
5 4 0 10000 展开
展开全部
使用分析函数row_number() over (partiion by ... order by ...)来进行分组编号,然后取分组标号值为1的记录即可。目前主流的数据库都有支持分析函数,很好用。
其中,partition by 是指定按哪些字段进行分组,这些字段值相同的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。
其中,partition by 是指定按哪些字段进行分组,这些字段值相同的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。
追问
row_number() over (partiion by ... order by ...),order by后可以是多个字段么?
比如:partiion by column1 order by column2 desc,column3 asc?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询