Это пример таблиц и используемых столбцов:
t_values:
╔════════════╦═══════════════╗
║ Serial ║ Date ║
╠════════════╬═══════════════╣
║ 1234214 ║ 2010.11.01... ║
╠════════════╬═══════════════╣
║ ABC9123213 ║ 2001.01.01... ║
╠════════════╬═══════════════╣
║ ... ║ ... ║
╚════════════╩═══════════════╝
t_devices:
╔════════════╦══════╗
║ Serial ║ Type ║
╠════════════╬══════╣
║ 1234214 ║ 2 ║
╠════════════╬══════╣
║ ABC9123213 ║ 13 ║
╠════════════╬══════╣
║ ... ║ ... ║
╚════════════╩══════╝
У меня есть этот запрос, чтобы получить значения счетчиков, сгруппированные по слабым, но также разделенные полем Type
:
SELECT CONCAT(YEAR(V.Date), '/', WEEK(V.Date)) AS Yearweek, COUNT(*) AS QTY, D.TypeID
FROM
t_values AS V
JOIN
t_devices AS D
ON V.Serial = D.Serial
WHERE D.TypeID = 1 --This is what I change manually
GROUP BY Yearweek
ORDER BY YEAR(V.Date) ASC, WEEK(V.Date) ASC
;
Этот столбец D.TypeID
имеет около 13 различных значений, поэтому мне нужно вручную изменить его для каждого значения и повторно выполнить запрос.
Но, очевидно, это анти-DRY подход. Поскольку я новичок в MySQL, у меня есть базовые c идеи о написании такого рода запросов " stati c", но у меня нет конкретного опыта или идеи о правильных решениях для некоторых других условия Dynami c.
Я знаю о возможности хранимых процедур. Это то, что я должен попытаться использовать именно для таких задач, или есть какой-то более простой, встроенный инструмент для итерации этого запроса с разными значениями выбранного столбца вместо этого?
Править : Меня попросили уточнить, как мне вообще понадобятся результаты, так как я мог бы просто сгруппировать по столбцу Yearkweek
и оставить часть WHERE
. Только то, что это даст мне одну большую таблицу с парами Yearweek-TypeID
.
Мне нужен запрос, который я отправил, с их собственными собственными отдельными результатами Типа, возможно, выполняемыми динамически после друг друга. И, возможно, я вызову этот запрос на другом языке или реализую его с помощью ORM и буду сохранять результаты в кадрах данных или превосходить каждый раз, когда выполняется запрос.
Поэтому я просто не уверен, какое направление является предпочтительным , Должен ли я использовать переменную и l oop, которые на языке, с которым я запускаю запрос SQL, или создать процедуру с собственным MySQL, предварительно вызвав этот вызов.