我有一个名为MusicTrack的表,其中包含MusicTrackID,TrackName和Duration。
列我正在使用查询:
Select Cast(DateAdd( ms,SUM(DateDiff( ms, '00:00:00', Duration)), '00:00:00' ) as time)
as 'Total duration' from
MusicTrack where MusicTrackID = '1' or MusicTrackID = '3'
此查询将两个选定音乐曲目的持续时间相加,并将其显示在名为总持续时间的临时列中。 'Duration'的数据类型是Time,所以我将它转换为整数并再返回。
我的问题:我可以通过哪种方式调整查询,还包括TrackName字段和运行总持续时间?或者包括临时列和TrackName列。
这样显示将具有TrackName和Total duration ......沿着以下行:
TrackName Duration Total duration
Name1 00:03:00 00:03:00
Name2 00:03:01 00:06:01
我试图将TrackName列包含在这样的查询中,但它不起作用:
Select TrackName, Cast(....) From MusicTrack where MusicTrackID = '1' or MusicTrackID = '3'
答案 0 :(得分:2)
尝试以下
我创建了一个示例表
SELECT * INTO TMPTIME
FROM (
SELECT 1 AS ID ,'Name1' AS NAME,'00:03:00' AS T
UNION
SELECT 2 AS ID,'Name2' AS NAME,'00:03:01' AS T
UNION
SELECT 3 AS ID,'Name3' AS NAME,'00:03:02' AS T
UNION
SELECT 4 AS ID,'Name4' AS NAME,'00:03:41' AS T
)TMP
输出查询
SELECT ID,NAME, T AS TIME,
(SELECT
cast(DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', cast (t as time) )), '00:00:00.000') as time)
FROM TMPTIME T1 WHERE T1.ID<=TMPTIME.ID
) AS TOTAL
FROM TMPTIME
结果
ID NAME TIME TOTAL
1 Name1 00:03:00 00:03:00.0000000
2 Name2 00:03:01 00:06:01.0000000
3 Name3 00:03:02 00:09:03.0000000
4 Name4 00:03:41 00:12:44.0000000
答案 1 :(得分:0)
sqlFiddle用于SQL Server(不是mySQL)
SELECT TrackName, Duration, Cast(DateAdd(ms,RunningTotal,'00:00:00') as time) as 'Total Duration'
FROM
(SELECT TrackName, Duration,
SUM(DateDiff(ms,'00:00:00',Duration)) OVER(ORDER BY MusicTrackId
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS RunningTotal
FROM MusicTrack
WHERE MusicTrackId IN (1,3)
)T
for mySql sqlFiddle,(不是SQL Server)
SELECT TrackName,Date_Format(Duration,'%k:%i:%s') as Duration,
Date_Format(runningTotal,'%k:%i:%s') as 'Total Duration'
FROM
(SELECT TrackName, Duration,
Sec_To_Time(@total:=@total + Time_To_Sec(Duration)) as runningTotal
FROM MusicTrack,(SELECT @total:='00:00:00')T
WHERE MusicTrackId IN (1,3)
ORDER BY MusicTrackId
)Result