2016-09-15 1 views
1

전에 다음 표는 내가MySQL의 순서는 DAY (타임 스탬프)에 의해 그룹

+-----+------+--------+----------+----------+---------------------+ 
| id | type | dwable | actionby | actionto | time    | 
+-----+------+--------+----------+----------+---------------------+ 
| 256 | 1 | 372 |  5 |  1 | 2016-09-15 13:04:13 | 
| 253 | 1 | 307 |  5 |  1 | 2016-09-15 13:04:12 | 
| 55 | 1 | 416 |  4 |  1 | 2016-09-15 13:04:09 | 
| 38 | 1 | 309 |  4 |  1 | 2016-09-12 13:04:01 | 
| 42 | 1 | 373 |  4 |  1 | 2016-09-10 13:04:08 | 
+-----+------+--------+----------+----------+---------------------+ 

이 ID를 생략을 얻으려고

CREATE TABLE `uc_likes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `type` int(255) NOT NULL, 
    `dwable` int(255) NOT NULL, 
    `actionby` int(255) NOT NULL, 
    `actionto` int(255) NOT NULL, 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=257 ; 

INSERT INTO `uc_likes` (`id`, `type`, `dwable`, `actionby`, `actionto`, `time`) VALUES 
(38, 1, 309, 4, 1, '2016-09-12 13:04:01'), 
(41, 1, 372, 4, 1, '2016-09-15 13:04:07'), 
(42, 1, 373, 4, 1, '2016-09-10 13:04:08'), 
(55, 1, 416, 4, 1, '2016-09-15 13:04:09'), 
(253, 1, 307, 5, 1, '2016-09-15 13:04:12'), 
(256, 1, 372, 5, 1, '2016-09-15 13:04:13'); 

SELECT * FROM uc_likes; 
+-----+------+--------+----------+----------+---------------------+ 
| id | type | dwable | actionby | actionto | time    | 
+-----+------+--------+----------+----------+---------------------+ 
| 38 | 1 | 309 |  4 |  1 | 2016-09-12 13:04:01 | 
| 41 | 1 | 372 |  4 |  1 | 2016-09-15 13:04:07 | 
| 42 | 1 | 373 |  4 |  1 | 2016-09-10 13:04:08 | 
| 55 | 1 | 416 |  4 |  1 | 2016-09-15 13:04:09 | 
| 253 | 1 | 307 |  5 |  1 | 2016-09-15 13:04:12 | 
| 256 | 1 | 372 |  5 |  1 | 2016-09-15 13:04:13 | 
+-----+------+--------+----------+----------+---------------------+ 

http://sqlfiddle.com/#!9/62794a

uc_likes를 불렀다 41 행은 이미 같은 날 기간 (15 일) 내에 동일한 dwable 값을 갖는 나중 항목을가집니다. 마찬가지로 id 41 행에 14 번째 타임 스탬프가 있으면 예를 들어 포함되어야합니다. 다른 답변은 내가 다음과 같이 그룹화 전에 주문 하위 쿼리를 사용하여 시도했다 제안으로

:

SELECT * FROM 
(SELECT * FROM `uc_likes` WHERE `actionto` = 1 ORDER BY time DESC) 
AS t GROUP BY DAY(time), dwable order by time DESC; 

그러나 이것은 여전히 ​​ID 256을 통해 ID 41을 선택합니다. 결과는 아래를 참조하십시오 :

+-----+------+--------+----------+----------+---------------------+ 
| id | type | dwable | actionby | actionto | time    | 
+-----+------+--------+----------+----------+---------------------+ 
| 256 | 1 | 372 |  5 |  1 | 2016-09-15 13:04:13 | 
| 253 | 1 | 307 |  5 |  1 | 2016-09-15 13:04:12 | 
| 55 | 1 | 416 |  4 |  1 | 2016-09-15 13:04:09 | 
| 38 | 1 | 309 |  4 |  1 | 2016-09-12 13:04:01 | 
| 42 | 1 | 373 |  4 |  1 | 2016-09-10 13:04:08 | 
+-----+------+--------+----------+----------+---------------------+ 
+0

당신이 예제의 sqlfiddle (sqlfiddle.com)를 만드는 것이 더 낫다하시기 바랍니다. 그래서, 우리는 당신의 문제를 재현 할 수 있습니다. – geeksal

+0

http://sqlfiddle.com/#!9/62794a @Strawberry – Ben

+0

@geeksal done. 나는 전에 그것을 사용한 적이 없기 때문에 나는 그것을 올바르게했다는 것을 희망한다. – Ben

답변

1

예컨대 :

SELECT x.* 
    FROM uc_likes x 
    JOIN 
    (SELECT dwable 
      , DATE(time) dt 
      , MAX(time) time 
     FROM uc_likes 
     GROUP 
      BY dwable 
      , dt 
    ) y 
    ON y.dwable = x.dwable 
    AND y.dt = DATE(x.time) 
    AND y.time = x.time; 
+-----+------+--------+----------+----------+---------------------+ 
| id | type | dwable | actionby | actionto | time    | 
+-----+------+--------+----------+----------+---------------------+ 
| 38 | 1 | 309 |  4 |  1 | 2016-09-12 13:04:01 | 
| 42 | 1 | 373 |  4 |  1 | 2016-09-10 13:04:08 | 
| 55 | 1 | 416 |  4 |  1 | 2016-09-15 13:04:09 | 
| 253 | 1 | 307 |  5 |  1 | 2016-09-15 13:04:12 | 
| 256 | 1 | 372 |  5 |  1 | 2016-09-15 13:04:13 | 
+-----+------+--------+----------+----------+---------------------+ 
+0

훌륭한 작품입니다. 편집/질문 질문 팁을 잘 주셔서 감사합니다. – Ben

관련 문제