[英]SQL: selecting unique rows
select
id,
attempt,
question,
att_number,
answer,
timestamp,
event
from
mytable
在MSSQL 2008 R2中给了我以下输出:
id,attempt,question,seq_number,answer,timestamp,event
1296040,22059,3813,0,"11960,11961,11959,11958:",1265006717,0
1296165,22059,3813,1,"11960,11961,11959,11958:11960",1265011083,2
1296166,22059,3813,1,"11960,11961,11959,11958:11960",1265011049,6
1296163,22059,3813,1,"11960,11961,11959,11958:11960",1265011037,6
1296164,22059,3813,1,"11960,11961,11959,11958:11960",1265011072,6
如何只为尝试,问题,att_number,答案和事件列选择唯一的行,而时间戳列的值是LOWEST?
我要这个:
id,attempt,question,seq_number,answer,timestamp,event
1296040,22059,3813,0,"11960,11961,11959,11958:",1265006717,0
1296165,22059,3813,1,"11960,11961,11959,11958:11960",1265011083,2
1296163,22059,3813,1,"11960,11961,11959,11958:11960",1265011037,6
您可以使用排名功能 :
with cte as(
select id,attempt,question,att_number,answer,timestamp,event,
rn = Row_Number() Over (
Partition By attempt, question, att_number, answer,event
Order By timestamp Asc)
from mytable
)
select select,id,attempt,question,att_number,answer,timestamp,event
from cte
where rn = 1
如果您希望每组的时间戳都最低的所有记录, Row_Number
用Dense_Rank
替换Dense_Rank
。
您必须使用group by
子句。
下面的select
语句适用于您的示例。
select
min(id), attempt,question,
att_number, answer, timestamp,
event
from
mytable
group by
attempt,question,
att_number, answer, timestamp,
event
但如果你真的想要最低的时间戳,你必须删除id
列形式的select
如下
select
attempt,question,
att_number, answer, min(timestamp),
event
from
mytable
group by
attempt,question,
att_number, answer,
event
您需要将GROUP BY与MIN一起使用:
select MIN(id),
attempt,
question,
seq_number,
answer,
MIN(timestamp),
event
from mytable
GROUP BY ATTEMPT, QUESTION, SEQ_NUMBER, ANSWER, EVENT
从这个问题来看不是很明显,但是OP既要MIN(ID)又要MIN(TIMESTAMP)。 还要注意,示例结果中的列名与OP的SQL中的列名不同。 我选择了接受该seq_number
中的示例结果是相同的att_number
从原来的SELECT语句。
分享并享受。
select
id,
attempt,
question,
att_number,
answer,
timestamp,
event
from
mytable m
where m.timestamp=(
select min(timestamp)
from mytable mi
where mi.attempt=m.attempt and mi.question=m.question and mi.att_number=m.att_number and mi.answer=m.answer and mi.event=m.event
)
使用不同的和按语句排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.