Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод всех дней и часов 
:(
    Опции темы
NightHarpy
Дата 18.7.2020, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.7.2020

Репутация: нет
Всего: нет



есть две таблицы:

| id | name |
-------------
| 42 | John |

| 43 | Jane |

и вторая:

| id | employee_id | hours | date |
----------------------------------------
| 1 | 42 | 4.5 | 1/12/2020 |

| 2 | 42 | 7.0 | 2/12/2020 |

| 3 | 43 | 5.5 | 1/12/2020 |

| 4 | 43 | 6.0 | 2/12/2020 |

Нужно вывести все 7 дней недели, в таком виде:

| Monday | John (4.45 hours), Jane (7.54 hours), Alex (3.5 hours) |

выводятся только три человека с самыми большими часами работы в конкретный день.
Заранее спасибо.
PM MAIL   Вверх
Oldshelf
Дата 20.7.2020, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 22.4.2018

Репутация: нет
Всего: 3



Код

SELECT *,DATE_FORMAT(STR_TO_DATE(`date`,'%d/%m/%Y'), '%a') AS `weekday` FROM `week`
LEFT JOIN `employee` ON `week`.`employee_id`=`employee`.`id`
WHERE UNIX_TIMESTAMP(STR_TO_DATE(`date`,'%d/%m/%Y'))>=UNIX_TIMESTAMP(STR_TO_DATE('1/12/2020','%d/%m/%Y'))
&& UNIX_TIMESTAMP(STR_TO_DATE(`date`,'%d/%m/%Y'))<=UNIX_TIMESTAMP(STR_TO_DATE('7/12/2020','%d/%m/%Y'))


Это сообщение отредактировал(а) Oldshelf - 20.7.2020, 12:54
PM MAIL WWW   Вверх
Агрох
Дата 18.9.2020, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Мне было скучно и я решил занялся лёгким некропостингом...

Код

WITH recursive R0 AS (
  SELECT 42 AS ID, 'John' AS Name FROM RDB$DATABASE
  UNION ALL
  SELECT 43 AS ID, 'Jane' AS Name FROM RDB$DATABASE
  UNION ALL
  SELECT 44 AS ID, 'Jak' AS Name FROM RDB$DATABASE
  UNION ALL
  SELECT 45 AS ID, 'Jun' AS Name FROM RDB$DATABASE
), R1 AS (
  SELECT 1 AS ID, 42 AS R0_ID, CAST(4.5 AS DECIMAL(2,1)) AS Hours, CAST('12/01/2020' AS DATE) AS dt FROM RDB$DATABASE
  UNION all
  SELECT 2 AS ID, 42 AS R0_ID, CAST(7.0 AS DECIMAL(2,1)) AS Hours, CAST('12/02/2020' AS DATE) AS dt FROM RDB$DATABASE
  UNION all
  SELECT 3 AS ID, 43 AS R0_ID, CAST(5.5 AS DECIMAL(2,1)) AS Hours, CAST('12/01/2020' AS DATE) AS dt FROM RDB$DATABASE
  UNION all
  SELECT 4 AS ID, 43 AS R0_ID, CAST(6.5 AS DECIMAL(2,1)) AS Hours, CAST('12/02/2020' AS DATE) AS dt FROM RDB$DATABASE
  UNION all
  SELECT 5 AS ID, 44 AS R0_ID, CAST(4.3 AS DECIMAL(2,1)) AS Hours, CAST('12/01/2020' AS DATE) AS dt FROM RDB$DATABASE
  UNION all
  SELECT 6 AS ID, 45 AS R0_ID, CAST(3.5 AS DECIMAL(2,1)) AS Hours, CAST('12/01/2020' AS DATE) AS dt FROM RDB$DATABASE
), R2 AS (
SELECT
  ROW_NUMBER() OVER(PARTITION BY R1.dt ORDER BY R1.Hours DESC) AS RN,
  R0.Name,
  R1.Hours,
  R1.dt
FROM R0
  INNER JOIN R1
    ON R1.R0_ID = R0.ID
), R3 AS (
select
  ROW_NUMBER() OVER(PARTITION BY EXTRACT(WEEKDAY FROM dt) ORDER BY Hours DESC) AS RN,
  MAX(RN) OVER(PARTITION BY EXTRACT(WEEKDAY FROM dt)) AS RN_M,
  EXTRACT(WEEKDAY FROM dt) AS WD,
  CAST(Name || '(' || Hours || ' hours)' AS VARCHAR(1000)) AS rs
FROM R2
WHERE RN < 4
), R4 AS (
  SELECT WD, rs, RN, RN_M
  FROM R3
  WHERE RN = 1

  UNION ALL

  SELECT R4.WD, R4.rs || ', ' || R3.rs AS rs, R3.RN, R4.RN_M
  FROM R4
    INNER join R3
      ON R3.WD = R4.WD
        and R4.RN + 1 = R3.RN
)
SELECT
  WD,
  RS
FROM R4
WHERE RN = RN_M

--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.