[英]SQL Return distinct rows based on two columns by rounding column to nearest value
Following is the Table: 以下是表格:
ID C1 C2 C3 Date C5 C6 Name
1 ### ### ### 9.53 ### ### ron
1 ### ### ### 9.57 ### ### ron
1 ### ### ### 9.87 ### ### ron
1 ### ### ### 10.2 ### ### jess
1 ### ### ### 10.2 ### ### jess
1 ### ### ### 11.3 ### ### mike
1 ### ### ### 11.3 ### ### mike
2 ### ### ### 16.58 ### ### ron
2 ### ### ### 16.33 ### ### ron
2 ### ### ### 16.45 ### ### ron
2 ### ### ### 22.43 ### ### jess
2 ### ### ### 22.88 ### ### jess
2 ### ### ### 19.2 ### ### mike
2 ### ### ### 19.51 ### ### mike
Following is what i am expecting: 以下是我所期待的:
Gettting distinct rows based on ID and Name, grouping by Date to nearest round number. 根据ID和名称获取不同的行,按日期分组到最接近的舍入数。
ID C1 C2 C3 Date C5 C6 Name
1 ### ### ### 9 ### ### ron
1 ### ### ### 10 ### ### jess
1 ### ### ### 11 ### ### mike
2 ### ### ### 16 ### ### ron
2 ### ### ### 22 ### ### jess
2 ### ### ### 19 ### ### mike
Can anyone help me on this? 谁可以帮我这个事?
is this helpful 这有用吗?
create table #tmp (Date float, Name varchar(10))
insert into #tmp values(9.53,'ron')
insert into #tmp values(9.57,'ron')
insert into #tmp values(9.87,'ron')
insert into #tmp values(10.2,'jess')
insert into #tmp values(10.2,'jess')
insert into #tmp values(11.3,'mike')
insert into #tmp values(11.3,'mike')
insert into #tmp values(16.58,'ron')
insert into #tmp values(16.33,'ron')
insert into #tmp values(16.45,'ron')
insert into #tmp values(22.43,'jess')
insert into #tmp values(22.88,'jess')
insert into #tmp values(19.2,'mike')
insert into #tmp values(19.51,'mike')
SELECT DISTINCT floor(Date) AS Date,Name from #tmp
drop table #tmp
Try this: 尝试这个:
SELECT DISTINCT ID, Rounded_Date, Name
FROM
(SELECT ID, FLOOR(Date) Rounded_Date, Name FROM Your_Table);
CREATE TABLE #Table1
([ID] int, [C1] varchar(3), [C2] varchar(3), [C3] varchar(3), [Date] numeric(10,4), [C5] varchar(3), [C6] varchar(3), [Name] varchar(4))
;
INSERT INTO #Table1
([ID], [C1], [C2], [C3], [Date], [C5], [C6], [Name])
VALUES
(1, '###', '###', '###', 9.53, '###', '###', 'ron'),
(1, '###', '###', '###', 9.57, '###', '###', 'ron'),
(1, '###', '###', '###', 9.87, '###', '###', 'ron'),
(1, '###', '###', '###', 10.2, '###', '###', 'jess'),
(1, '###', '###', '###', 10.2, '###', '###', 'jess'),
(1, '###', '###', '###', 11.3, '###', '###', 'mike'),
(1, '###', '###', '###', 11.3, '###', '###', 'mike'),
(2, '###', '###', '###', 16.58, '###', '###', 'ron'),
(2, '###', '###', '###', 16.33, '###', '###', 'ron'),
(2, '###', '###', '###', 16.45, '###', '###', 'ron'),
(2, '###', '###', '###', 22.43, '###', '###', 'jess'),
(2, '###', '###', '###', 22.88, '###', '###', 'jess'),
(2, '###', '###', '###', 19.2, '###', '###', 'mike'),
(2, '###', '###', '###', 19.51, '###', '###', 'mike')
;
select distinct [ID], [C1], [C2], [C3], cast(date as int), [C5], [C6], [Name] from #Table1
Looking at your requirement, I think this might give you the expected result 看看你的要求,我认为这可能会给你预期的结果
;with cte
as
(
select
SeqNo = row_number() over(partition by
ID,
C1,
C2,
C3,
cast(Date as int),
C5,
C6,
Name order by id),
ID,
C1,
C2,
C3,
Date,
C5,
C6,
Name
from t1
)
select
ID,
C1,
C2,
C3,
Date,
C5,
C6,
Name
from cte where seqNo = 1
试试这个:
select distinct id, round(date,0) as date,name from your_table;
You can use this code, 你可以使用这段代码,
select ID, C1, C2, C3, floor(Date) as RDate, C5, C6, Name
from your_table_name
group by ID, Name, RDate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.