0

我有一个包含 3 列的表CompanyDateTime并且Price.

我想按每个公司的日期排序最后一行,例如

Google, 2012/7/17 5:24:32, 23
Google, 2012/7/17 5:46:23, 72
Google, 2012/7/17 5:43:46, 15
Apple, 2012/7/17 5:24:45, 36
Apple, 2012/7/17 5:26:42, 57
Apple, 2012/7/17 5:15:12, 25

期望的结果是:

Google, 2012/7/17 5:46:23, 72
Apple, 2012/7/17 5:26:42, 57
4

5 回答 5

1

如果您的 DBMS 是SQL-Server(至少 2005 年),您可以使用CTEwithROW_NUMBER函数:

WITH CTE AS(
    SELECT Company, DateTime, Price
    , RN = ROW_NUMBER()OVER(PARTITION BY Company ORDER BY DateTime DESC)
    FROM Table
)
SELECT Company, DateTime, Price
FROM CTE
WHERE RN = 1
于 2012-07-17T09:05:38.387 回答
0

这是一个与 DBMS 无关的解决方案,无论您使用什么 DBMS(因为您没有指定)都应该工作:

SELECT a.*
FROM tbl a
INNER JOIN
(
    SELECT company, MAX(datetime) AS maxdate
    FROM tbl
    GROUP BY company
) b ON a.company = b.company AND a.datetime = b.maxdate
ORDER BY a.datetime DESC
于 2012-07-17T09:03:53.633 回答
0
select 
    Company, DateTime,Price 
from
    (
    select *,row_number() over (Partition by Company order by Date desc) as sno 
      from table
    ) as t
where sno=1
于 2012-07-17T09:04:28.247 回答
0

一个简单的:

select company, MAX(datetime), price 
from table_name
group by company;
于 2012-07-17T09:21:29.860 回答
0

尝试这个

select t.* from <table> t join
(select Company,max(DateTime) max_DateTime
from <table>
group by Company)a
on t.Company=a.Company
and t.DateTime=a.max_DateTime
于 2012-07-17T09:09:54.987 回答