我有一个包含以下数据的表:
TRIP TRIP_DATE TRIP_TIME
A 2018-08-08 11:00
A 2018-08-09 11:00
A 2018-08-08 23:00
A 2018-08-20 11:00
A 2018-08-20 14:00
我希望select语句检索旅行次数Count,最新日期和时间。 基本上输出应该是这样的:
TRIPS MAX(TRIP_DATE) TRIP_TIME
5 2018-08-20 14:00
答案 0 :(得分:1)
这很棘手。我想我会这样做:
select cnt, date, time
from (select t.*,
row_number() over (partition by trip order by date desc, time desc) as seqnum
count(*) over (partition by trip) as cnt
from t
) t
where seqnum = 1;
答案 1 :(得分:0)
您可以使用row_number()
函数:
select t.*
from (select *, row_number() over (partition by trip order by date desc, time desc) seq
from table t
) t
where seq = 1;
答案 2 :(得分:0)
您可以使用GROUP BY
使用以下内容:
SELECT TRIP, COUNT(TRIP) AS cnt, MAX(CONCAT(TRIP_DATE, ' ', TRIP_TIME)) AS maxDateTime
FROM table_name
GROUP BY TRIP
要结合DATE
和TIME
值,可以使用以下之一:
您可以将上述查询用作子查询,以获取DATE
和TIME
作为单独的值:
SELECT TRIP, cnt, DATE(maxDateTime), TIME_FORMAT(TIME(maxDateTime), '%H:%i') FROM (
SELECT TRIP, COUNT(TRIP) AS cnt, MAX(CONCAT(TRIP_DATE, ' ', TRIP_TIME)) AS maxDateTime
FROM table_name
GROUP BY TRIP
)t;
注意:我建议在应用程序端拆分DATE
和TIME
值。我还将DATE
和TIME
的值存储在DATETIME
而不是单独的列中。
答案 3 :(得分:0)
我会同意这一点(假设您也想要MAX
Trip_Time
,从您的示例中很难看出这一点):
SELECT COUNT(TRIP) AS Trips,
MAX(TRIP_DATE) AS MAX(TRIP_DATE),
MAX(TRIP_TIME) AS TRIP_TIME
FROM myTable
GROUP BY TRIP
答案 4 :(得分:0)
您可以选择在这里将分析功能用作组功能。 所有人都会做的。查看最终输出,我相信使用group by的max函数更合适。 没有硬性规定,但是我个人比较喜欢在需要抑制最终结果时分组。