Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NiXXX
так формула же есть для распределения - задайте ее.
   

Цитата:
Функция normal_rand на вход принимает только int

это не вход, это количество данных, что нужно сгенерировать.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 07:40 11-02-2023 | Исправлено: Mavrikii, 07:41 11-02-2023
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii, спасибо! Не без танцев с бубном, но взлетело.

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 12:46 21-02-2023
FreePaul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Выбираю из SCCM сведения. Встал вопрос о задвоении/затроении/за... получаемых сведений.
Пример (данные выбираются из разных таблиц, join по ID):
в результате селекта получаем следующий набор данных:

Как видно, строки размножаются в зависимости от количества компонентов. Т.е. если у компьютера 1 только 2 жестких диска, то и строк, соответствующих ему - 2. А если у компьютера 4 - по 2 жестких диска, сетевых карт и плашек памяти, то таких записей уже 6.
 
Как средствами SQL добиться такого представления:

 


----------
Восход Солнца - это хорошо для начала...

Всего записей: 930 | Зарегистр. 07-08-2002 | Отправлено: 09:34 02-09-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreePaul
смотрите в сторону GROUP_CONCAT (MySQL) или STRING_AGG у MSSQL

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 10:02 02-09-2023
FreePaul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
смотрите в сторону GROUP_CONCAT (MySQL) или STRING_AGG у MSSQL

Что-то пошло не так...
Вот текст запроса (#):
 
 
При его выполнении получаю сообщение об ошибке:

Цитата:
Сообщение 8120, уровень 16, состояние 1, строка 3
Столбец "v_R_System.Distinguished_Name0" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

 
Если заменить ORDER BY на GROUP BY, при этом указав в качестве параметров для группировки все вышепереисленные поля (иначе "вываливается" та же самая ошибка), то данные отбираются, НО идет обработка STRING_AGG у трех поледующих за той, что нужно, записей. А те две записи, которые принадлежат одному компьютеру, но у него две сетевых - так и отображается в результатах SELECT'a двумя строками

----------
Восход Солнца - это хорошо для начала...

Всего записей: 930 | Зарегистр. 07-08-2002 | Отправлено: 17:54 04-09-2023 | Исправлено: FreePaul, 17:55 04-09-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreePaul
крупный запрос.. но да, нужно группировать сначала по уникальному id, а потом по остальному.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 23:40 08-09-2023
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreePaul
STRING_AGG агрегатная функция и предполагает использование при группировке. поля используемые в STRING_AGG не нужно группировать
 
рекомендую использовать вместо STRING_AGG старый добрый GROUP_CONCAT в таких случаях, он проще в использовании и даёт больше возможностей в формировании строки. по сравнению со STRING_AGG у него только один недостаток, если в запросе использовать несколько GROUP_CONCAT, то строки передаваемые им невозможно отсортировать по внешнему ключу и они всегда будут в произвольном порядке относительно друг-друга. зато позволяет строить строку из нескольких полей и использовать DISTINCT внутри себя.  

Код:
SELECT v_R_System.Netbios_Name0 as PCName,
v_R_System.User_Name0 As UserName,
v_R_User.Full_User_Name0 as FullUserName,
Computer_System_DATA.Manufacturer00 as PCManufacturer,
Computer_System_DATA.Model00 as PCModel,
yourbase.dbo.GROUP_CONCAT_D(Netcard_DATA.Name00 + ' MAC:' + Netcard_DATA.MacAddress00 + ' IP:' + substring(Network_DATA.IPAddress00,0,charindex(',',Network_DATA.IPAddress00)), '/') as Netcards,
yourbase.dbo.GROUP_CONCAT_D('disk: ' + DISK_DATA.Model00 + ' size:' + DISK_DATA.Size00, '/') as Disks,
yourbase.dbo.GROUP_CONCAT_D('cd: ' + CD_ROM_DATA.MediaType00 + ' name:' + CD_ROM_DATA.Name00, '/') as CD_ROMs
FROM ...

поля используемые внутри GROUP_CONCAT_D не группируете, остальные, не в агрегатных функциях, группируете.

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 09:55 09-09-2023 | Исправлено: DenSyo, 04:36 10-09-2023
FreePaul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DenSyo
Спасибо! Как только доберусь до рабочего сервера, попробую.

----------
Восход Солнца - это хорошо для начала...

Всего записей: 930 | Зарегистр. 07-08-2002 | Отправлено: 19:29 20-09-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Есть таблица со столбцами 'clock' и 'ns'. Значения в столбце 'clock' записаны в формате unixtime. Как сформировать запрос чтобы вывести значения за определенный период времени за рабочий день. К примеру мне нужно вывести значения за месяц учитывая только время с 9-00 до 13-00 и с 14-00 до 18-00?

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 10:04 04-12-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
granitiv
сервер какой?
 
для MySQL  
SELECT * FROM tablename WHERE HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18
 
ну и добавить ограничение за месяц, только определитесь как хотите - со времени сейчас или по номеру или еще что.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 10:24 04-12-2023 | Исправлено: Mavrikii, 10:46 04-12-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сервер mariadb. Нужно выбрать за определенный период. Допустим поступает запрос на выборку с 1.01.2023 по 10.01.2023.

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 10:28 04-12-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
granitiv

Цитата:
Сервер mariadb. Нужно выбрать за определенный период.

значит mysql
 
SELECT *
FROM tablename
WHERE
(HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18)
AND
clock BETWEEN UNIX_TIMESTAMP('2023-01-01') AND UNIX_TIMESTAMP('2023-10-10')

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 10:34 04-12-2023 | Исправлено: Mavrikii, 10:46 04-12-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. То что надо
 
Добавлено:

Цитата:
SELECT *
FROM tablename
WHERE
(HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18)
AND
clock BETWEEN UNIX_TIMESTAMP('2023-01-01') AND UNIX_TIMESTAMP('2023-10-10')

а есть возможность исключить выходные дни?

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 10:57 04-12-2023 | Исправлено: granitiv, 11:25 04-12-2023
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а праздничные дни как Вы будете анализировать?
 
Обычно создают настроечную таблицу на год в которую вносят все выходные и праздники в каждом году и дальше используют ее при запросах.

Всего записей: 490 | Зарегистр. 02-04-2015 | Отправлено: 11:30 04-12-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мне хотя бы просто исключить субботу и воскресенье

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 11:36 04-12-2023
andyzubov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
поверьте. лучше сделайте настроечную таблицу, сейчас просят выходные, а потом потребуют и праздники учитывать.
 
ну а так ищите функцию дня недели и анализируйте

Всего записей: 490 | Зарегистр. 02-04-2015 | Отправлено: 11:47 04-12-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
granitiv

Цитата:
мне хотя бы просто исключить субботу и воскресенье

 
SELECT *
FROM tablename
WHERE
(HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18)
AND
clock BETWEEN UNIX_TIMESTAMP('2023-01-01') AND UNIX_TIMESTAMP('2023-10-10')
AND
DAYOFWEEK(FROM_UNIXTIME(clock)) NOT IN (1,7)

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 11:49 04-12-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо огромное

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 12:00 04-12-2023 | Исправлено: granitiv, 12:00 04-12-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
granitiv

Цитата:
(HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18)

тут коррекция, так как инклюзивный оператор, то будет между 9 и 12, 14 и 17

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 01:56 05-12-2023
granitiv

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
SELECT *
FROM tablename
WHERE
(HOUR(FROM_UNIXTIME(clock)) BETWEEN 9 AND 13 OR HOUR(FROM_UNIXTIME(clock)) BETWEEN 14 AND 18)
AND
clock BETWEEN UNIX_TIMESTAMP('2023-01-01') AND UNIX_TIMESTAMP('2023-10-10')
AND
DAYOFWEEK(FROM_UNIXTIME(clock)) NOT IN (1,7)

 
А можно как-то одним запросом получить сразу три значения (мин, среднее, макс)?
Грубо говоря SELECT speed, clock FROM tablename ... Т.е. получить мин, среднее, макс значение speed

Всего записей: 6 | Зарегистр. 20-06-2016 | Отправлено: 09:37 06-12-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru