programing

mysql에서 그룹 이름 전 날짜 및 시간별로 주문

prostudy 2022. 9. 11. 16:38
반응형

mysql에서 그룹 이름 전 날짜 및 시간별로 주문

제 테이블은 다음과 같습니다.

name    date         time
tom | 2011-07-04 | 01:09:52
tom | 2011-07-04 | 01:09:52
mad | 2011-07-04 | 02:10:53
mad | 2009-06-03 | 00:01:01

먼저 가장 오래된 이름을 원합니다.

SELECT * 
ORDER BY date ASC, time ASC 
GROUP BY name

(->가 동작하지 않는다!)

이제 그것은 톰보다 먼저 나를 화나게 할 것이다.

, 하하와 함께GROUP BY name ORDER BY date ASC, time ASC분류하기 전에 그룹화되기 때문에 새로운 mad를 먼저 내게 준다!

다시 말씀드리지만, GROUP BY는 ORDER BY보다 이전이어야 하므로 그룹화 전에 날짜 및 시간을 기준으로 정렬할 수 없습니다.

다른 방법:

SELECT * 
FROM (
    SELECT * FROM table_name
    ORDER BY date ASC, time ASC 
) AS sub
GROUP BY name

GROUP BY는 처음 일치하는 결과에 따라 그룹화됩니다.첫 번째 매칭 히트가 당신이 원하는 것이라면 모든 것이 예상대로 작동해야 합니다.

나는 서브쿼리가 다른 조건을 부가하는 것보다 논리적으로 타당하기 때문에 이 방법을 선호한다.

사용자 1908688의 답변에 대해서는 코멘트를 할 수 없기 때문에 MariaDB 사용자에게 힌트를 드리겠습니다.

SELECT *
FROM (
     SELECT *
     ORDER BY date ASC, time ASC
     LIMIT 18446744073709551615
     ) AS sub
GROUP BY sub.name

https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/

이것이 당신이 찾고 있는 것이라고 생각합니다.

SELECT name, min(date)
FROM myTable
GROUP BY name
ORDER BY min(date)

당분간은 STR_를 통해 mysql 날짜를 만들어야 합니다.TO_DATO_DATE:

STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s')

따라서:

SELECT name, min(STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s'))
FROM myTable
GROUP BY name
ORDER BY min(STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s'))

이 방법은 효과가 있었습니다.

SELECT *
FROM your_table
WHERE id IN (
    SELECT MAX(id)
    FROM your_table
    GROUP BY name
);

하위 선택 사용:

select name, date, time
from mytable main
where date + time = (select min(date + time) from mytable where name = main.mytable)
order by date + time;

최대 날짜 및 그룹 이름을 기준으로 정렬하지 않을 경우 다음 쿼리를 수행할 수 있습니다.

SELECT name,MAX(date) FROM table  group by name ORDER BY name

여기서 date는 특정 날짜 또는 날짜 시간 문자열로 지정할 수 있습니다.각 이름별 최대 날짜 값 응답입니다.

는 이 . 이 질문에서는 단 않았습니다.DATETIME 및 ""가 했습니다.limit a a agroup by ★★★★★★★★★★★★★★★★★」distinct으로 한 후datetime 도움이 됐어요

select distinct (column) from
(select column from database.table
order by date_column DESC) as hist limit 10

분할 필드가 있는 이 경우 콘캣을 기준으로 정렬할 수 있으면 다음과 같은 작업을 수행할 수 있습니다.

select name,date,time from
(select name from table order by concat(date,' ',time) ASC)
as sorted

제한하려면 마지막에 제한 문구를 추가합니다.

select name,date,time from
(select name from table order by concat(date,' ',time) ASC)
as sorted limit 10

하나의 은 ' 하다' 입니다.LEFT JOIN+ 열에 , 쉽게 .먼저 날짜 필드만 고려하는 예를 들어보겠습니다. 날짜 + 시간을 하나의 날짜 열에 저장하는 것이 일반적이며 이해하기 쉽게 쿼리를 단순하게 유지하고 싶습니다.

따라서 이 예에서는 날짜 에 따라 가장 오래된 레코드를 표시하고 테이블 이름이 호출되었다고 가정할 수 있습니다.people을 사용하다

SELECT p.* FROM people p
LEFT JOIN people p2 ON p.name = p2.name AND p.date > p2.date
WHERE p2.date is NULL
GROUP BY p.name

,, … ...LEFT JOIN 「」가 되는 "p.date되어 있기 때문에 은 없습니다.p2.date왼쪽 결합의 값이 작기 때문에 그에 대응하는 값입니다.p2.date될 것이다NULL그래서, 추가함으로써WHERE p2.date is NULL가장 오래된 날짜의 레코드만 표시합니다.

마찬가지로 최신 레코드를 표시하는 경우 에서 비교 연산자를 변경할 수 있습니다.LEFT JOIN:

SELECT p.* FROM people p
LEFT JOIN people p2 ON p.name = p2.name AND p.date < p2.date
WHERE p2.date is NULL
GROUP BY p.name

여기서 date+time이 개별 컬럼인 이 예에서는 예를 들어 두 컬럼을 조합한 날짜/시간을 기준으로 쿼리할 경우 다음과 같이 어떤 방식으로든 이들 컬럼을 추가해야 합니다.

SELECT p.* FROM people p
LEFT JOIN people p2 ON p.name = p2.name AND p.date + INTERVAL TIME_TO_SEC(p.time) SECOND > p2.date + INTERVAL TIME_TO_SEC(p2.time) SECOND
WHERE p2.date is NULL
GROUP BY p.name

에 대한 자세한 내용은 특정 컬럼의 그룹별 최대값을 유지하는 행 페이지에서 확인할 수 있습니다.

Oracle에서는 이 방법이 효과적입니다.

SELECT name, min(date), min(time)
    FROM table_name
GROUP BY name

mysql은 날짜별로 sup order로 * from (SELECT number, max(date_added) as datea FROM sms_chat group by date)를 선택합니다.설명

이것은 정확한 답은 아니지만 mysql에서 그룹화하기 전에 행을 정렬하는 접근법에 대한 문제를 해결하려는 사용자에게 도움이 될 수 있습니다.

이 스레드에 온 것은 최신 행을 찾고 싶었기 때문입니다(즉, 특정 컬럼유형에 대한 유일한 결과를 얻을 수 있습니다).

이러한 문제를 해결하기 위한 또 다른 접근법은 집계를 활용하는 것입니다.

따라서 asc를 정렬하고 와 같은 컬럼으로 그룹화된 최신 날짜를 나타내는 새 필드를 정상적으로 실행할 수 있습니다.

특정 열의 데이터를 지금 찾으려고 하는데 최대 집계를 수행할 수 없다고 가정합니다.일반적으로 특정 컬럼의 데이터를 검색하려면 를 사용하여 해당 컬럼에는 존재하지 않는 고유한 구분 기호(예: )를 사용할 수 있습니다.또한 이 컬럼에 액세스하는 동안 new_column 필드를 분할/해독할 수 있습니다.

다시 말하지만, 모든 사람에게 이 말이 들리지는 않을 수도 있습니다.저는 그것을 했고, 함수도 거의 쓰지 않았고 서브쿼리를 실행할 수 없었기 때문에 그것을 좋아했습니다.저는 php용 코드 시그니터 프레임워크 작업을 하고 있습니다.

복잡성에 대해서도 확신할 수 없지만, 누군가 그것에 대해 해명할 수 있을 것이다.

경위:)

언급URL : https://stackoverflow.com/questions/6572110/order-by-date-and-time-before-group-by-name-in-mysql

반응형