Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вычислить разниу во времяни / 5 сообщений из 5, страница 1 из 1
05.01.2021, 22:55
    #40033719
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить разниу во времяни
Имеется примерно такая схема
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
CREATE TABLE `transactions` (
  `record_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `trasaction_time` timestamp NOT NULL DEFAULT current_timestamp(),
  `status` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `transactions`
--

INSERT INTO `transactions` (`record_id`, `user_id`, `trasaction_time`, `status`) VALUES
(1, 1, '2021-01-01 06:33:17', 1),
(2, 1, '2021-01-01 18:03:17', 2),
(3, 2, '2021-01-01 06:04:32', 1),
(4, 2, '2021-01-01 18:04:10', 2),
(5, 1, '2021-01-02 06:28:20', 1),
(6, 1, '2021-01-02 17:58:29', 2),
(7, 2, '2021-01-02 06:40:42', 1),
(8, 2, '2021-01-02 18:40:42', 2),
(9, 1, '2021-01-03 06:02:11', 1),
(10, 1, '2021-01-03 18:41:12', 2),
(11, 2, '2021-01-03 05:55:33', 1),
(12, 2, '2021-01-03 17:45:33', 2);

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `login` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
  `first_name` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
  `status` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `login`, `first_name`, `status`) VALUES
(1, 'algol', 'robert', 1),
(2, 'Atom', 'Tormast', 1);



как мне спомощью только SQL получить примерно такой результат:

Имя юзера дата(день) и продолжительность паюочего дня(транзакция со статусом 1 это начало раюоты со статусом 2 конец)

Заранее спасибо за ответ
...
Рейтинг: 0 / 0
05.01.2021, 23:54
    #40033730
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить разниу во времяни
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.id, t1.login, t1.first_name, t1.status,
       DATE(t2.trasaction_time) `date`,
       MIN(CASE WHEN t2.status = 1 THEN t2.trasaction_time END) income,
       MAX(CASE WHEN t2.status = 2 THEN t2.trasaction_time END) outcome
FROM users t1
JOIN transactions t2 ON t1.id = t2.user_id
GROUP BY id, login, first_name, status, `date`
ORDER BY id, `date`;


fiddle
...
Рейтинг: 0 / 0
06.01.2021, 12:53
    #40033798
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить разниу во времяни
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.record_id, t1.login, t1.first_name, t1.last_name, t1.status,
       DATE(t2.trasaction_time) `date`,
       MIN(CASE WHEN t2.status = 1 THEN t2.trasaction_time END) income,
       MAX(CASE WHEN t2.status = 2 THEN t2.trasaction_time END) outcome
FROM users t1
JOIN transactions t2 ON t1.record_id = t2.user_id
GROUP BY record_id, login, first_name, last_name, status, `date`
ORDER BY record_id, `date`;



вот так работает, но мне хочится получить ещё и разницу между income и outcome

пытаюсь так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.record_id, t1.login, t1.first_name, t1.last_name, t1.status,
       DATE(t2.trasaction_time) `date`,
       MIN(CASE WHEN t2.status = 1 THEN t2.trasaction_time END) income,
       MAX(CASE WHEN t2.status = 2 THEN t2.trasaction_time END) outcome,
       ROUND(TIME_TO_SEC(timediff(income, outcome))/60) AS diff
FROM users t1
JOIN transactions t2 ON t1.record_id = t2.user_id
GROUP BY record_id, login, first_name, last_name, status, `date`
ORDER BY record_id, `date`;



получаю #1054 - Unknown column 'income' in 'field list'
почему не узнает псевдоним? или тут придётся повторно пихать этот мин и мах?
...
Рейтинг: 0 / 0
06.01.2021, 12:54
    #40033799
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить разниу во времяни
Areostar
или тут придётся повторно пихать этот мин и мах?
Да.
...
Рейтинг: 0 / 0
06.01.2021, 15:16
    #40033832
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить разниу во времяни
Akina, спасибо за ответы
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вычислить разниу во времяни / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]