This commit is contained in:
2026-09-29 01:46:16 +03:00
parent e05ff1449b
commit fe9221a4dd
5 changed files with 458 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
-- ============================================================
-- Проверочные запросы 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;