SQL Pro - всё об SQL
Реклама: @anothertechrock
Контент канала:
1. Разбор вопросов с собеседований
2. Трюки SQL
3. Видео
4. Тесты
5. Задачи на логику
6. Юмор
Post #245
3.59K
SQ @sqlprofi
Showing posts older than #246 · Back to latest
SELECT
id,
name,
ROW_NUMBER () OVER (ORDER BY id DESC)
FROM products;
#tipsproducts содержит следующие данные:id name
42 Milk
22 Bread
28 Pen
…id. SELECT * FROM table1;
SELECT COUNT(*) FROM table1;
SELECT rows FROM sysindexes WHERE id = OBJECT_ID(table1) AND indid < 2;WITH projects (task_id, start_date, end_date)
AS (VALUES
(1, CAST('10-01-20' AS date), CAST('10-02-20' AS date)),
(2, CAST('10-02-20' AS date), CAST('10-03-20' AS date)),
(3, CAST('10-03-20' AS date), CAST('10-04-20' AS date)),
(4, CAST('10-13-20' AS date), CAST('10-14-20' AS date)),
(5, CAST('10-14-20' AS date), CAST('10-15-20' AS date)),
(6, CAST('10-28-20' AS date), CAST('10-29-20' AS date)),
(7, CAST('10-30-20' AS date), CAST('10-31-20' AS date))),
-- получим такие даты начала, которых не существует в колонке даты окончания (это 'настоящие' даты начала проекта)
t1 AS (
SELECT start_date
FROM projects
WHERE start_date NOT IN (SELECT end_date FROM projects) ),
-- получим такие даты окончания, которые не существуют в колонке дат начала (это 'настоящие' даты окончания проекта)
t2 AS (
SELECT end_date
FROM projects
WHERE end_date NOT IN (SELECT start_date FROM projects) ),
--отфильтруем допустимые пары начало-окончание (начало < окончание), затем найдем правильную дату окончания для каждой даты начала (минимальная дата окончания, поскольку нет пересекающихся проектов)
t3 AS (
SELECT
start_date,
MIN(end_date) AS end_date
FROM t1, t2
WHERE start_date < end_date
GROUP BY 1 )
SELECT
*,
end_date - start_date AS project_duration
FROM t3
ORDER BY 3, 1
#tips

projects содержит три столбца: task_id, start_date и end_date. end_date) и датой начала (start_date) составляет 1 день для каждой строки таблицы. Если даты окончания задач последовательны, они являются частью одного проекта. Даты проектов не пересекаются.

SELECT * FROM user WHERE name LIKE '%test%';Данный запрос позволяет найти данные всех пользователей, имена которых содержат в себе «test».
SELECT * FROM user WHERE name LIKE 't_est';А в этом случае имена искомых пользователей начинаются на «t», после содержат какой-либо символ и «est» в конце.
SELECT * FROM user t
WHERE t.id REGEXP '114|23|868'; user все значения id, содержащие в себе 114, 23 и 868. SELECT * FROM user t
WHERE t.id LIKE '%114%'
OR t.id LIKE '%23%'OR t.id LIKE '%868%';