Files
gym-bro/sql/verify.sql
T

124 lines
3.7 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- Проверочные запросы v2
-- ============================================================
-- 1. Все тренировки клиента с типом тренировки
SELECT
c.full_name,
w.start_time,
wt.name AS workout_type,
w.notes,
CASE WHEN w.end_time IS NULL THEN '🔥 Активная' ELSE '✅ Завершена' END AS status
FROM workouts w
JOIN clients c ON c.id = w.client_id
LEFT JOIN workout_types wt ON wt.id = w.workout_type_id
ORDER BY w.start_time DESC;
-- 2. Полная тренировка с дроп-сетами
SELECT
w.start_time,
wt.name AS workout_type,
we.exercise_name,
CASE
WHEN s.is_dropset = 0 THEN printf('%s кг × %s', s.weight, s.reps)
ELSE '🔥 DROPSET'
END AS set_info,
s.rating
FROM workouts w
LEFT JOIN workout_types wt ON wt.id = w.workout_type_id
JOIN workout_exercises we ON we.workout_id = w.id
JOIN sets s ON s.workout_exercise_id = we.id
WHERE w.id = 1
ORDER BY we.sort_order, s.sort_order;
-- 3. Элементы дроп-сета
SELECT
s.id AS set_id,
di.sort_order,
di.weight,
di.reps
FROM sets s
JOIN dropset_items di ON di.set_id = s.id
WHERE s.is_dropset = 1
ORDER BY s.id, di.sort_order;
-- 4. История упражнения (для подсказок)
SELECT
w.start_time,
s.weight,
s.reps,
s.is_dropset
FROM workout_exercises we
JOIN sets s ON s.workout_exercise_id = we.id
JOIN workouts w ON w.id = we.workout_id
WHERE we.exercise_name = 'Горизонтальная тяга'
AND w.end_time IS NOT NULL
ORDER BY w.start_time DESC
LIMIT 10;
-- 5. Динамика замеров клиента (для дашборда)
SELECT
bm.metric_date,
mt.name AS metric_name,
mt.unit,
bmv.value
FROM body_metrics bm
JOIN body_metric_values bmv ON bmv.body_metric_id = bm.id
JOIN metric_types mt ON mt.id = bmv.metric_type_id
WHERE bm.client_id = 1
ORDER BY bm.metric_date DESC, mt.sort_order;
-- 6. Динамика конкретного замера (например, бицепс)
SELECT
date(bm.metric_date) AS day,
bmv.value
FROM body_metrics bm
JOIN body_metric_values bmv ON bmv.body_metric_id = bm.id
JOIN metric_types mt ON mt.id = bmv.metric_type_id
WHERE bm.client_id = 1
AND mt.name = 'Бицепс'
ORDER BY bm.metric_date DESC;
-- 7. Статистика по клиентам (для тренера)
SELECT
c.full_name,
c.goal,
COUNT(DISTINCT w.id) AS total_workouts,
SUM(CASE WHEN w.end_time IS NOT NULL THEN 1 ELSE 0 END) AS completed,
MAX(w.start_time) AS last_workout
FROM clients c
LEFT JOIN workouts w ON w.client_id = c.id
GROUP BY c.id
ORDER BY last_workout DESC;
-- 8. Тренировки клиента за последнюю неделю
SELECT
w.start_time,
wt.name AS workout_type,
COUNT(DISTINCT we.id) AS exercises_count,
SUM(CASE WHEN s.is_dropset = 0 THEN 1 ELSE (SELECT COUNT(*) FROM dropset_items WHERE set_id = s.id) END) AS total_sets
FROM workouts w
LEFT JOIN workout_types wt ON wt.id = w.workout_type_id
LEFT JOIN workout_exercises we ON we.workout_id = w.id
LEFT JOIN sets s ON s.workout_exercise_id = we.id
WHERE w.client_id = 1
AND w.start_time >= date('now', '-7 days')
GROUP BY w.id
ORDER BY w.start_time DESC;
-- 9. Все упражнения с их типами тренировок
SELECT
e.name,
wt.name AS workout_type
FROM exercises e
LEFT JOIN workout_types wt ON wt.id = e.workout_type_id
ORDER BY wt.sort_order, e.name;
-- 10. Все доступные типы замеров
SELECT
name,
unit,
category
FROM metric_types
ORDER BY sort_order;