Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрат данные по нескольким диапазрнам дат / 11 сообщений из 11, страница 1 из 1
22.04.2021, 15:33
    #40064780
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Добрый день!
Помогите пожалуйста правильно написать запрос: мне нужно по двум диапазонам дат выбрать данные, я хочу , чтобы даты(их две за вчера и позавчера, можно и за позапозавчера) шли по порядку и рядом выбираемые данные
Я пытаюсь Сase использовать, но у меня не выходит
Код: plsql
1.
2.
3.
4.
SELECT case when DATE >='2021-04-21 00:00:00' AND  DATE <'2021-04-22 00:00:00' then 'yest'
              when DATE >='2021-04-20 00:00:00' AND  DATE <'2021-04-21 00:00:00' then 'day before yest'
ELSE "" END DAT, gateway,SUM(revenue),COUNT(ORDER_id) FROM zingfit_sales
GROUP BY gateway		


Хочу , чтобы результат выводился как на картинке, только для DAT проставлась "yest" и "'day before yest'", ну сумма соответственно считалась за вчера и позавчера
сейчас сумма вообще не понятно за какой период считается...
...
Рейтинг: 0 / 0
22.04.2021, 16:35
    #40064823
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
hattter,
1) Используйте BETWEEN вместо "<=" и ">=". Можно и более элегантно сделать, но пока бог с ним;
2) У вас смысловая мешанина в запросе. Вы делаете группировку по gateway, соответственно, у вас группируются данные по всей таблице (это ответ на вопрос откуда берётся сумма), а дата из этого процесса выпадает, поэтому поле DAT всё время пустая строка. Т.е. вы не уловили, что CASE/WHEN никак на выборку не влияют, вам нужно добавить WHERE.

Сначала всегда стройте запрос без группировки. Выберите те данные, которые вам нужны. Проверьте, то ли получилось или нет. Потом начинайте группировать. SQL-запрос - это матрёшка по сути.
...
Рейтинг: 0 / 0
22.04.2021, 16:59
    #40064831
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Точно про Case сказали)) на выборку не влияет, не учла, а теперь у меня выдает только за позавчера данные:
Код: plsql
1.
2.
3.
4.
5.
SELECT case when DATE >='2021-04-21 00:00:00' AND  DATE <'2021-04-22 00:00:00' then 'yest'
              when DATE >='2021-04-20 00:00:00' AND  DATE <'2021-04-21 00:00:00' then 'day before yest'
ELSE "" END DAT, gateway,SUM(revenue) FROM zingfit_sales
WHERE DATE >='2021-04-20 00:00:00' AND  DATE <'2021-04-22 00:00:00' 
GROUP BY gateway		


и суммирует при этом за обе даты
...
Рейтинг: 0 / 0
23.04.2021, 00:36
    #40064979
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
hattter,
1) Повтор внушения: используйте BETWEEN вместо "<=" и ">=". От вашего запроса кровь из глаз идёт;
2) Первый тезис "выдает только за позавчера данные" и второй тезис "суммирует при этом за обе даты" противоречат друг другу;
3) Повтор внушения: уберите группировку вместе с CASE/WHEN и посмотрите, что получается на выходе. Станет понятно, каких данных нет и почему.

А вообще без примеров данных разговор пустой.
...
Рейтинг: 0 / 0
23.04.2021, 08:44
    #40065036
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Gluck99,

2)противоречит, но оно так и есть
3)изначально я делала без группировки и выводилось очень много данных для каждой даты с минутами соответственно и для каждого gateway, но выводилось всё
пример аднных только для одной даты и одного gateway прикладываю, внизу продолжаются аналогичные данные для всех остальных
...
Рейтинг: 0 / 0
23.04.2021, 09:21
    #40065046
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Вроде уже сказали:
Gluck99
А вообще без примеров данных разговор пустой.
Так что вместо бессмысленных скриншотов выложите CREATE TABLE + INSERT INTO скрипты с примером данных, покажите требуемый результат для именно этих данных, и дайте пояснения, почему именно так. Можете создать online fiddle и дать ссылку - это даже проще будет.
И не забудьте указать точную версию сервера.
...
Рейтинг: 0 / 0
23.04.2021, 09:35
    #40065052
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Akina,
Код: 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.
CREATE TABLE `zingfit_sales` (
	`DATE` DATETIME NOT NULL,
	`ORDER_ID` BIGINT(20) NOT NULL,
	`CUSTOMER_ID` BIGINT(20) NOT NULL,
	`PAYMENT_TYPE` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
	`PRICE` DECIMAL(10,2) NULL DEFAULT NULL,
	`QUANTITY` DECIMAL(10,2) NULL DEFAULT NULL,
	`DISCOUNT` DECIMAL(10,2) NULL DEFAULT NULL,
	`TAX` DECIMAL(10,2) NULL DEFAULT NULL,
	`TOTAL` DECIMAL(10,2) NULL DEFAULT NULL,
	`REVENUE` DECIMAL(10,2) NULL DEFAULT NULL,
	`PRETAX_REVENUE` DECIMAL(10,2) NULL DEFAULT NULL,
	`ITEMID` BIGINT(20) NULL DEFAULT NULL,
	`ITEM` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
	`TYPE` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
	`FIRSTNAME` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
	`LASTNAME` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
	`SITE_ID` BIGINT(20) NULL DEFAULT NULL,
	`SITE` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
	`COST` DECIMAL(10,2) NULL DEFAULT NULL,
	`GATEWAY_ID` BIGINT(20) NULL DEFAULT NULL,
	`GATEWAY` VARCHAR(255) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
	INDEX `idx_CUSTOMER_ID_DATE` (`CUSTOMER_ID`, `DATE`) USING BTREE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;


версия сервера: 5.7.33-0ubuntu0.18.04.1
А как я могу показать требуемый результат, если у меня не получается его создать?
Только на скрине могу показать , то что вышло, еще нужны суммы за вчера. Почему так нужно? ---потому что надо видеть сумму Revenue по каждому gateway за вчера и позавчера
...
Рейтинг: 0 / 0
23.04.2021, 09:50
    #40065057
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
INSERT INTO скрипты с примером данных не могу дать, потому как БД заполняется пайтоновским скриптом , который тянет данные с сайта, разве что в екселе могу выложить за два дня эти данные, но воядли вы будете заморачиваться и загружать их себе в базу
...
Рейтинг: 0 / 0
23.04.2021, 10:07
    #40065067
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Блин, поудаляйте лишние для задачи поля из структуры, и нарисуйте INSERT INTO руками - надо-то всего десяток записей.

hattter
как я могу показать требуемый результат, если у меня не получается его создать?
То есть Вы даже не знаете, что именно хотите получить? а тогда не всё ли равно, что возвращает запрос, а?
...
Рейтинг: 0 / 0
23.04.2021, 10:16
    #40065078
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
hattter
теперь у меня выдает только за позавчера данные:
и суммирует при этом за обе даты
Всё у вас выдаётся правильно. За обе даты. Просто когда идёт группировка, вторая дата берётся произвольно (первой), а это именно позавчера. Вы не можете одновременно группировать по полю gateway и иметь вывод за обе даты (т.е. получить две записи), т.к. группировка подразумевает только одну запись с уникальным значением поля gateway. Т.е. группировать вам надо по датам и по gateway.
Код: sql
1.
group by DAT, gateway
...
Рейтинг: 0 / 0
23.04.2021, 10:18
    #40065081
hattter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрат данные по нескольким диапазрнам дат
Gluck99,
спасибо большое!!!)))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрат данные по нескольким диапазрнам дат / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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