3

次のように4つのフィールドを持つテーブルがあります。

(UIDはユーザーID)

ID UID MUSIC DATE 
1   0   a   2013-10-20
2   0   a   2013-10-21
3   0   a   2013-10-22
4   0   a   2013-10-24
5   0   b   2013-10-11
8   0   b   2013-10-15
10  0   c   2013-10-26
9   0   c   2013-10-25
7   0   c   2013-10-20
6   0   c   2013-10-18
11  0   d   2013-10-10

MySQLクエリを使用して、上記のテーブルから2番目に高い日付をすべて取得するにはどうすればよいですか?

期待される結果:

ID UID MUSIC DATE 
3   0   a   2013-10-22
5   0   b   2013-10-11
9   0   c   2013-10-25

また

ID UID MUSIC DATE 
3   0   a   2013-10-22
5   0   b   2013-10-11
9   0   c   2013-10-25
11  0   d   2013-10-10
4

6 に答える 6

0

次のクエリを試すことができます-

SELECT ID, UID, MUSIC, MAX(DATE) FROM TableName
WHERE DATE NOT IN (SELECT MAX(DATE) FROM TableName )

従業員の 2 番目に高い給与を見つけるようなものだと思います -

于 2013-10-22T12:14:06.007 に答える
0

おそらくもっとエレガントな解決策がありますが、ここに1つの方法があります...

 SELECT a.* 
   FROM
      ( SELECT x.*
          FROM my_music x 
          JOIN my_music y 
            ON y.uid = x.uid 
           AND y.music = x.music 
           AND y.date >= x.date 
         GROUP 
            BY id
        HAVING COUNT(*) <= 2
      ) a
   JOIN
      ( SELECT x.*
          FROM my_music x 
          JOIN my_music y 
            ON y.uid = x.uid 
           AND y.music = x.music 
           AND y.date >= x.date 
         GROUP 
            BY id
        HAVING COUNT(*) <= 2
      ) b
     ON b.uid = a.uid
    AND b.music = a.music
    AND b.date <= a.date
  GROUP 
     BY id
 HAVING COUNT(*) = 1;
于 2013-10-22T12:40:51.280 に答える
-1

select id,music,[uid] from (select row_number() over ( PARTITION BY id order by [date] desc) as rn ,id,music,[uid] from table_name) a where rn = 2 -- insted of 2 u好きな番号に変更できます

于 2013-10-22T12:21:34.737 に答える
-2

これを試して

これはSQLクエリです

SELECT * FROM 
(SELECT 
ROW_NUMBER() OVER (PARTITION BY Music ORDER BY Date DESC) NO,
*
FROM UrTable) AS T1 WHERE no = 2
于 2013-10-22T12:42:09.820 に答える