MySQL, получить дату, где сумма строки = 3 - PullRequest
0 голосов
/ 27 января 2020

Я хочу найти третью доступную встречу из списка встреч.

MySql В базе данных есть строки с столбцами RotaType, Date и UnusedSlots в качестве столбцов

Я хочу сделать что-то вроде

 $sql3 = "SELECT * FROM `UsageDailyUnusedSlots` WHERE Date >= '$Today' AND RotaType LIKE '%Derm%' AND UnusedSlots > 0 AND RotaType NOT LIKE '%- Y%' AND RotaType NOT LIKE '%- y%' ORDER BY Date LIMIT 1 OFFSET 2;";

однако я бы нашел 3-й день с доступными слотами, а не 3-й.

Я мог бы сделать сложный l oop каждой строки, складывая значение с каждым итерация / l oop и повторение значения, когда итог> = 3, однако я считаю, что должен быть лучший способ.

Вот сценарий

Table of Data

Мой код sql, указанный выше, выбрал бы 31.01.2020 в качестве 3-го дня с включенными UnusedSlots, однако я хочу, чтобы он выбрал 30/01/2020 в качестве даты, так как это когда третий следующий неиспользованный назначение

Есть мысли?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Вы можете использовать функции windows, чтобы найти указанное c расположение нужного слота. Например:

select *
from (
  select
    *,
    sum(`UnusedSlots`) over(order by Date 
      rows between unbounded preceding and 1 preceding) as previous_slots,
    sum(`UnusedSlots`) over(order by Date) as current_slots
  from `UsageDailyUnusedSlots`
  where Date >= '2020-01-15' 
    and RotaType like '%Derm%' 
    and RotaType not like '%- Y%' 
) x
where previous_slots < 3 and current_slots >= 3
0 голосов
/ 27 января 2020
WITH cte AS (
    SELECT *,
           SUM(UnusedSlots) OVER (ORDER BY Date) cnt
    FROM `UsageDailyUnusedSlots` 
    WHERE Date >= '$Today' 
    AND RotaType LIKE '%Derm%' 
    AND UnusedSlots > 0 
    AND RotaType NOT LIKE '%- Y%' 
    AND RotaType NOT LIKE '%- y%' )
SELECT *
FROM cte
WHERE cnt >= 3
ORDER BY cnt
LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...