如果下一行不相同,则仅选择行

时间:2016-02-11 17:41:41

标签: php mysql

我有一张包含歌曲代码和时间戳的表格。代码表示正在播放的歌曲,时间戳表示歌曲被识别为正在播放的时间。我需要生成所有代码及其相应时间戳的列表,但仅限于第一次识别它们。主要问题是一首歌可能会播放多次,唯一表明它是歌曲的新实例的是前一行会包含不同的代码。

这是我的代码(仅提供每个

的第一个和最后一个时间码
SELECT a.* FROM ap_results a INNER JOIN ( SELECT trackId, MAX(timeplay), timeplay FROM ap_results GROUP BY trackId ) b ON a.trackId = b.trackId AND a.timeplay > b.timeplay WHERE a.trackId <> b.trackId ORDER BY timeplay

-

╔════╦══════════╦═════════════════════╦══╗
║ id ║ trackId  ║      playTime       ║  ║
╠════╬══════════╬═════════════════════╬══╣
║  1 ║ 42390-01 ║ 2016-02-01 01:00:00 ║  ║
║  2 ║ 42390-01 ║ 2016-02-01 01:01:00 ║  ║
║  3 ║ 42390-01 ║ 2016-02-01 01:01:25 ║  ║
║  4 ║ 54212-04 ║ 2016-02-01 01:01:30 ║  ║
║  5 ║ 54212-04 ║ 2016-02-01 01:01:59 ║  ║
║  6 ║ 42390-01 ║ 2016-02-01 01:02:08 ║  ║
║  7 ║ 12899-03 ║ 2016-02-01 01:07:02 ║  ║
║  8 ║ 12899-03 ║ 2016-02-01 01:07:26 ║  ║
║  9 ║ 42390-01 ║ 2016-02-01 01:08:10 ║  ║
╚════╩══════════╩═════════════════════╩══╝

我需要一个查询来显示以下内容:

42390-01 - 2016-02-01 01:00:00
54212-04 - 2016-02-01 01:01:30
42390-01 - 2016-02-01 01:02:08
12899-03 - 2016-02-01 01:07:02
42390-01 - 2016-02-01 01:08:10

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找的不容易用sql beacuse获得的是程序结果..

以下是一些简短的建议(在pesudo代码中,因为我不会使用您使用的服务器端语言),以便通过程序方法服务器端获取结果。

connect your db 

get all the rows in order of timeplay 

set the firts rows in a var (actRow) and in an array of result rows (resultRows[])

loop over these rows starting from the second  {
     if the actual in loop  row trackId is not the same of actRow. {
             store/add this row in resultRows // for final result 
             and set the var for row with this value
      }
}

show  the resultRows