찾다

 >  Q&A  >  본문

MySQL은 리드 함수를 사용하여 날짜부터 끝까지의 기간을 계산합니다.

사용자의 다양한 세션(구독, 구독 취소, 탈퇴, 온라인) 기록을 저장하는 테이블이 있습니다. 아래 주어진 쿼리를 사용하여 각 세션의 지속 시간을 계산할 수 있습니다. 사용자가 "2022년 5월 15일 오후 11시"에 온라인 세션을 시작하고 그 다음날 "2022년 5월 16일 오후 2시: 오전 00시"에 떠난다고 가정하는 시나리오가 있습니다. 총 온라인 시간은 3시간이고 마지막 회선의 날짜는 2022년 5월 15일입니다.

하지만 나에겐 이게 필요해 5월 15일부터 '2022년 5월 15일 23시 59분 59초'까지 온라인 시간은 1시간이며, 5월 16일부터 '2022년 5월 16일 0시 00분부터 2022년 5월 16일 02시'까지 온라인 시간은 1시간이다. ":00 AM", 2시간 동안 온라인이므로 이에 대한 응답으로 5월 15일의 총 3시간 대신 5월 15일의 1시간과 5월 16일의 2시간을 반환해야 합니다

created_at 열에서 기간을 가져오기 위해 리드 함수를 사용하고 있습니다. 다음 Create_at에서 23:59:59까지의 기간을 계산하도록 리드 함수를 제한할 수 있는 방법이 있나요?

제 취업문의입니다. 저는 최신 MySQL(8) 버전을 사용하고 있습니다.

으아아아

다음은 샘플 데이터입니다.

select `id`, `user_id`, `status`, `created_at`,
 SEC_TO_TIME(TIMESTAMPDIFF(SECOND, created_at,
LEAD(created_at) OVER (PARTITION BY user_id ORDER BY created_at))) as duration,
 date(created_at) as date from `user_websocket_events` as `all_status`
 where created_at between '2022-05-15 00:00:00' and '2022-05-16 23:59:59' and `status` is not null
 and user_id in (69) order by `id` asc;

P粉885035114P粉885035114237일 전427

모든 응답(1)나는 대답할 것이다

  • P粉481815897

    P粉4818158972024-03-29 13:08:37

    동적 달력을 사용하여 날짜별로 세션 분할

    으아악

    db<>바이올린

    회신하다
    0
  • 취소회신하다