Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2020, 23:28   #1
Ksanta_I
 
Регистрация: 26.06.2020
Сообщений: 4
По умолчанию Выбор позиций, использующихся ежедневно

Здравствуйте.
Очень нужна помощь специалистов.
В sql я новичок. Сейчас бьюсь над одной задачей, сломала себе уже голову.
Ситуация такая - есть некая таблица, содержащая в себе обширный список товаров. Необходимо отслеживать, какие товары продаются ежедневно за определенный период времени (он задается и может быть произвольным). Товар может быть продан 1 раз в день или несколько раз, а может быть не продан совсем. В итоге должна быть таблица с названием только тех товаров, которые в течении всего заданного периода (месяц, неделя, 10 дней, год и т.д.) продавался каждый день хотя бы единожды.
Заранее спасибо за помощь.
С уважением...
Ksanta_I вне форума Ответить с цитированием
Старый 28.06.2020, 20:00   #2
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

Ув. Ksanta_I, для того, чтобы получить внятный ответ, нужно внятно задать вопрос.
Цитата:
Сообщение от Ksanta_I Посмотреть сообщение
некая таблица
Структура таблицы (Вы уверены, что данные содержаться только в одной таблице, а не в нескольких связанных таблицах?). Какие столбцы содержит "таблица", параметры, размерность). И т.д. и т.п. Только после получения дополнительных сведений, возможно, в чем-то помочь. Здесь нет телепатов...
Viktor61 вне форума Ответить с цитированием
Старый 29.06.2020, 00:24   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

1. с одной таблицей
Код:
select товар, count(s) 
from ( --- продажи в течения дня
         select товар, день, 1 as s 
         from ... 
         where день ... -- за необходимый период
         group by товар, день
       )
group by товар
having count(s)= ... --число дней в периоде
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 29.06.2020, 10:49   #4
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
select товар, count(s)
from ( --- продажи в течения дня
select товар, день, 1 as s
from ...
where день ... -- за необходимый период
group by товар, день
)
group by товар
having count(s)= ... --число дней в периоде
Для Firebird'a
Одна таблица tovar, первичный ключ ID и т.д.
Код:
create table Tovar 
Id integer not null,
nam_tov VarChar(50),
Den date,
CONSTRAINT PK_ID PRIMARY KEY (Id)
);

commit work;


select Id, count(s) 
from ( --- продажи в течения дня
         select Id, Den, 1 as s 
         from tovar
         where Den = '02.03.2020' -- за необходимый период
         group by Id, Den
       )
group by ID
having count(s)= 31; --... --число дней в периоде

Последний раз редактировалось Viktor61; 29.06.2020 в 11:34.
Viktor61 вне форума Ответить с цитированием
Старый 11.07.2020, 09:11   #5
Ksanta_I
 
Регистрация: 26.06.2020
Сообщений: 4
По умолчанию

Всем спасибо за ответы =)
Извините, что долго не отвечала - была в отпуске.

Наверное, уточню свой вопрос.
Есть таблица с данными:
id_tovar Start Date
tovar1 09.07.2019 9:55
tovar1 10.07.2019 17:26
tovar2 10.07.2019 17:18
tovar2 10.07.2019 11:30
tovar2 11.07.2019 8:30
tovar3 06.07.2019 8:25
tovar3 10.07.2019 17:17
tovar3 10.07.2019 12:07
tovar3 11.07.2019 8:32
tovar4 06.07.2019 10:14
tovar4 06.07.2019 11:16
tovar4 07.07.2019 8:47
tovar4 07.07.2019 9:15
tovar4 07.07.2019 18:06
tovar4 08.07.2019 10:16
tovar4 09.07.2019 16:17
tovar4 09.07.2019 16:28
tovar4 10.07.2019 9:15
tovar4 10.07.2019 18:34
tovar4 10.07.2019 18:45
tovar4 11.07.2019 9:29
tovar6 08.07.2019 10:07
tovar7 10.07.2019 11:37
tovar7 10.07.2019 17:22
tovar7 11.07.2019 8:35
tovar8 11.07.2019 13:38
tovar10 06.07.2019 19:04
tovar10 06.07.2019 18:59
tovar10 07.07.2019 16:55
tovar10 08.07.2019 19:15
tovar10 08.07.2019 13:27
tovar10 08.07.2019 17:02
tovar10 09.07.2019 8:39
tovar10 09.07.2019 8:51
tovar10 10.07.2019 19:37
tovar10 10.07.2019 19:36
tovar10 11.07.2019 16:30


Для того, чтобы отфильтровать те товары, которые продаются ежедневно за определенный период времени, делаю следующий запрос

SELECT distinct id_tovar, convert(varchar(10),StartDate,104) as Дата_Подбора, count(*) as kol FROM tabl
where StartDate between convert(datetime, ate1 ,104) and convert(datetime, ate2 ,104)
group by tovar, StartDate
order by Object, convert(varchar(10),StartDate,104)

Период взяла с 06.07.2019 по 11.07.2019

В итоге получается следующая таблица:
id_tovar Date kol
tovar1 09.07.2019 1
tovar1 10.07.2019 1
tovar2 10.07.2019 1
tovar2 11.07.2019 1
tovar3 06.07.2019 1
tovar3 10.07.2019 1
tovar3 11.07.2019 1
tovar4 06.07.2019 1
tovar4 07.07.2019 1
tovar4 08.07.2019 1
tovar4 09.07.2019 1
tovar4 10.07.2019 1
tovar4 11.07.2019 1
tovar6 08.07.2019 1
tovar7 10.07.2019 1
tovar7 11.07.2019 1
tovar8 11.07.2019 1
tovar10 06.07.2019 1
tovar10 07.07.2019 1
tovar10 08.07.2019 1
tovar10 09.07.2019 1
tovar10 10.07.2019 1
tovar10 11.07.2019 1


А должна:
id_tovar kol
tovar4 6
tovar10 6

Или хотя бы:

id_tovar kol
tovar1 2
tovar2 2
tovar3 3
tovar4 6
tovar6 1
tovar7 2
tovar8 1
tovar10 6

Подскажите, плиз, где я что-то не то делаю.

Спасибо.

Последний раз редактировалось Ksanta_I; 11.07.2020 в 09:17.
Ksanta_I вне форума Ответить с цитированием
Старый 11.07.2020, 11:00   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. с одной таблицей
Код:
select товар, count(s) 
from ( --- продажи в течения дня
         select товар, день, 1 as s 
         from ... 
         where день ... -- за необходимый период
         group by товар, день
       )
group by товар
having count(s)= ... --число дней в периоде
Цитата:
Подскажите, плиз, где я что-то не то делаю.
вы сделали ТОЛЬКО внутренний запрос
вот это
Цитата:
Код:
from ( --- продажи в течения дня
         select товар, день, 1 as s 
         from ... 
         where день ... -- за необходимый период
         group by товар, день
       )
и count там не нужен
а теперь надо к нему добавить все остальное.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 14.07.2020, 22:39   #7
Ksanta_I
 
Регистрация: 26.06.2020
Сообщений: 4
По умолчанию

Всё получилось =)
Спасибо всем за помощь!
Ksanta_I вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить сколько километров пробегал спортсмен ежедневно в течение недели ALena77 Помощь студентам 0 16.11.2019 22:24