Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择按日期排序的列值不同的行?_Sql_Sql Server_Sql Server 2008_Tsql_Sql Server 2005 - Fatal编程技术网

Sql 如何选择按日期排序的列值不同的行?

Sql 如何选择按日期排序的列值不同的行?,sql,sql-server,sql-server-2008,tsql,sql-server-2005,Sql,Sql Server,Sql Server 2008,Tsql,Sql Server 2005,我有这张桌子: create table #tmp ( column1 varchar(3), column2 varchar(5), column3 datetime, column4 int ) insert into #tmp values ('AAA', 'SKA', '2013-02-01 00:00:00', 10) insert into #tmp values ('AAA', 'SKA', '2013-01-31 00:00:00', 15) insert in

我有这张桌子:

create table #tmp
(
  column1 varchar(3),
  column2 varchar(5),
  column3 datetime,
  column4 int
)

insert into #tmp values ('AAA', 'SKA', '2013-02-01 00:00:00', 10)
insert into #tmp values ('AAA', 'SKA', '2013-01-31 00:00:00', 15)
insert into #tmp values ('AAA', 'SKB', '2013-01-31 00:00:00', 20)
insert into #tmp values ('AAA', 'SKB', '2013-01-15 00:00:00', 5)
insert into #tmp values ('AAA', 'SKC', '2013-02-01 00:00:00', 25)
我想选择列2不同的行,按列3排序。 这是期望的结果:

Col1  Col2   Col3                       Col4
AAA   SKB    2013-01-15 00:00:00.000    5
AAA   SKA    2013-01-31 00:00:00.000    15
AAA   SKC    2013-02-01 00:00:00.000    25
我该怎么做?
我正在使用MS SQL 2005和2008,这应该可以

http://sqlfiddle.com/#!3/d3dad/11

select * from
(
select max(column1) as column1, column2 as column2, max(column3) as column3, 
  max(column4) as column4
from #tmp
group by column2
) a
order by column3

这取决于你想要什么。您必须处理其他列

从准确的数据中,为了得到准确的结果:

select column1, column2, min(column3), min(column4)
from #tmp
group by column1, column2
但是,通常情况下,column3值可能来自与column4值不同的记录,并且如SQL中所述,如果有多个column1值具有相同的column2值,则将使用相同的column2得到多个结果。

尝试此方法

;with cte as 
(
  select *, 
  row_number() over (partition by column1, column2 
             order by column3) rnk
  from #tmp

) select * from cte where rnk = 1
  order by column3;

这将使用最旧的列3获得唯一的列2,并通过按列3排序的结果筛选表。我认为
行数()更好(


如何确定2条SKA记录中哪一条是要返回的正确记录?@alroc:按日期,我想要最旧的一条。可能重复此查询将不起作用。它有许多语法错误,而且不完整。或者,我错过了group by中的其他字段。如果您忘记为子查询添加别名,现在应该可以使用了。这将不会返回所需的输出,尽管我最终在SQLFIDLE上运行并发布了运行脚本!Column1将始终具有相同的值如果col1、col2、col3值在多行中重复,则此操作将不起作用。最好使用
行编号()
不区分
SELECT t.column1, t.column2, t.column3, t.column4
FROM @tmp t
INNER JOIN (SELECT DISTINCT column2, MIN(column3) [column3] FROM @tmp GROUP BY column2) v
    ON t.column2 = v.column2 AND t.column3 = v.column3
ORDER BY t.column3
select column1, column2, column3, column4 
from (
  select column1, column2, column3, column4, 
         row_number() over (partition by column2 order by column3) rn
  from #tmp ) A
where rn=1
order by column3