나는 mysql 테이블에 이름과 시간을 기록한 것처럼 각 이름에 대해 마지막 5 레코드를 선택하려고한다. 나는이 조인을 할 수 없다. 어떤 도움?mysql 마지막 5 행을 유지하고 오래된 레코드를 제거
샘플 데이터 내가 displaly하려면이 데이터에서
CREATE TABLE `ntest`
( `id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`updated_at` timestamp NOT NULL
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
INSERT INTO `ntest` VALUES
(1,'java','2012-01-28 21:14:01'),
(2,'java','2012-01-28 21:14:03'),
(3,'java','2012-01-28 21:14:04'),
(4,'perl','2012-01-28 21:14:08'),
(5,'perl','2012-01-28 21:14:09'),
(6,'perl','2012-01-28 21:14:09'),
(7,'perl','2012-01-28 21:14:10'),
(8,'perl','2012-01-28 21:14:11'),
(9,'perl','2012-01-28 21:14:11'),
(10,'perl','2012-01-28 21:14:12'),
(11,'perl','2012-01-28 21:14:13'),
(12,'perl','2012-01-28 21:14:14'),
(13,'mysql','2012-01-28 21:14:21'),
(14,'mysql','2012-01-28 21:14:22'),
(15,'mysql','2012-01-28 21:14:22'),
(16,'mysql','2012-01-28 21:14:23'),
(17,'mysql','2012-01-28 21:14:23'),
(18,'mysql','2012-01-28 21:14:24'),
(19,'mysql','2012-01-28 21:14:25'),
(20,'mysql','2012-01-28 21:14:25'),
(21,'mysql','2012-01-28 21:14:26'),
(22,'mysql','2012-01-28 21:14:26'),
(23,'mysql','2012-01-28 21:14:27'),
(24,'mysql','2012-01-28 21:14:27'),
(25,'php','2012-01-28 21:21:27')
. 마지막 다섯 자바, MySQL은, 펄 및 PHP 기록
편집 : 귀하의 대답에 따라 나는 SQL 함께 왔어,하지만 내가 원하는 방식으로 작동하지 않습니다.
select
NameCounts.name,
NameCounts.updated_at,
NameCounts.numnames,
@RankSeq := if(@LastDistrict = NameCounts.name, @RankSeq +1, 1) DistRankSeq,
@LastDistrict := NameCounts.name as ignoreIt
from
(select a.name, a.updated_at, count(*) as numnames
from ntest a
group by a.name, a.updated_at
order by
a.name, a.updated_at desc) NameCounts
JOIN (select @RankSeq := 0, @LastDistrict = 0) SQLVars
HAVING
DistRankSeq <= 5
결과 :
+-------+---------------------+----------+-------------+----------+
| name | updated_at | numnames | DistRankSeq | ignoreIt |
+-------+---------------------+----------+-------------+----------+
| java | 2012-01-28 19:21:47 | 1 | 1 | java |
| java | 2012-01-28 16:14:04 | 1 | 3 | java |
| java | 2012-01-28 16:14:03 | 1 | 5 | java |
| mysql | 2012-01-28 16:14:27 | 2 | 1 | mysql |
| mysql | 2012-01-28 16:14:26 | 2 | 3 | mysql |
| mysql | 2012-01-28 16:14:25 | 2 | 5 | mysql |
| perl | 2012-01-28 19:22:18 | 1 | 1 | perl |
| perl | 2012-01-28 16:14:14 | 1 | 3 | perl |
| perl | 2012-01-28 16:14:13 | 1 | 5 | perl |
| php | 2012-01-28 19:21:40 | 1 | 1 | php |
| php | 2012-01-28 16:21:27 | 1 | 3 | php |
+-------+---------------------+----------+-------------+----------+
내가 펄의 5 개 행을 기대는
mysql> select * from ntest where name='perl';
+----+------+---------------------+
| id | name | updated_at |
+----+------+---------------------+
| 4 | perl | 2012-01-28 16:14:08 |
| 6 | perl | 2012-01-28 16:14:09 |
| 7 | perl | 2012-01-28 16:14:10 |
| 9 | perl | 2012-01-28 16:14:11 |
| 10 | perl | 2012-01-28 16:14:12 |
| 11 | perl | 2012-01-28 16:14:13 |
| 12 | perl | 2012-01-28 16:14:14 |
| 28 | perl | 2012-01-28 19:22:18 |
+----+------+---------------------+
8 rows in set (0.00 sec)
빠른 응답을 주셔서 감사합니다.하지만 내 이름은 동적입니다. 100 개의 다른 이름을 가질 수 있습니다. – sfgroups
MySQL에서 상위 5 개를 사용할 수 없습니다. – sfgroups
코드에서 SQL을 생성하는 것만으로 내 마음에 왔습니다. –