powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрат данные по нескольким диапазрнам дат
11 сообщений из 11, страница 1 из 1
Выбрат данные по нескольким диапазрнам дат
    #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
Выбрат данные по нескольким диапазрнам дат
    #40064823
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hattter,
1) Используйте BETWEEN вместо "<=" и ">=". Можно и более элегантно сделать, но пока бог с ним;
2) У вас смысловая мешанина в запросе. Вы делаете группировку по gateway, соответственно, у вас группируются данные по всей таблице (это ответ на вопрос откуда берётся сумма), а дата из этого процесса выпадает, поэтому поле DAT всё время пустая строка. Т.е. вы не уловили, что CASE/WHEN никак на выборку не влияют, вам нужно добавить WHERE.

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

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

2)противоречит, но оно так и есть
3)изначально я делала без группировки и выводилось очень много данных для каждой даты с минутами соответственно и для каждого gateway, но выводилось всё
пример аднных только для одной даты и одного gateway прикладываю, внизу продолжаются аналогичные данные для всех остальных
...
Рейтинг: 0 / 0
Выбрат данные по нескольким диапазрнам дат
    #40065046
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде уже сказали:
Gluck99
А вообще без примеров данных разговор пустой.
Так что вместо бессмысленных скриншотов выложите CREATE TABLE + INSERT INTO скрипты с примером данных, покажите требуемый результат для именно этих данных, и дайте пояснения, почему именно так. Можете создать online fiddle и дать ссылку - это даже проще будет.
И не забудьте указать точную версию сервера.
...
Рейтинг: 0 / 0
Выбрат данные по нескольким диапазрнам дат
    #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
Выбрат данные по нескольким диапазрнам дат
    #40065057
hattter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO скрипты с примером данных не могу дать, потому как БД заполняется пайтоновским скриптом , который тянет данные с сайта, разве что в екселе могу выложить за два дня эти данные, но воядли вы будете заморачиваться и загружать их себе в базу
...
Рейтинг: 0 / 0
Выбрат данные по нескольким диапазрнам дат
    #40065067
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, поудаляйте лишние для задачи поля из структуры, и нарисуйте INSERT INTO руками - надо-то всего десяток записей.

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


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