With LIKE you can use the following two wildcard characters in the pattern:
- % matches any number of characters, even zero characters.
- _ matches exactly one character.
WITH cte AS ( SELECT *,
LAG(`datetime`) OVER (PARTITION BY login ORDER BY `datetime`) lag_datetime,
LAG(event) OVER (PARTITION BY login ORDER BY `datetime`) lag_event
FROM history )
SELECT login, SUM(TIMESTAMPDIFF(MINUTE, lag_datetime, `datetime`)) duration
FROM cte
WHERE (event, lag_event) = (2,1)
GROUP BY login;
а для более старых версий невозможно выполнить то, что я хочу?
SELECT *
FROM services
JOIN (
SELECT *,
@row_number := CASE WHEN service_id = @service_id
THEN @row_number + 1
ELSE 1
END rownumber,
@service_id := service_id
FROM orders
CROSS JOIN (SELECT @service_id := 0, @row_number := 0) init_vars
ORDER BY service_id, id DESC
) enumerated_orders USING (service_id)
WHERE enumerated_orders.rownumber <= services.service_limit
Информация о том, что пользователь оплатил подписку заносится в бд (есть отдельная строка, в которой изначальное значение равно нулю, а при оплате меняется на 1).
значение сменилось на 1, а потом через месяц само сменилось на 0.
фишка в том, что в бд порядок меняется, условно скажем, после того, как вытащишь из бд и превратишь обратно в массив, он уже принимает вот такой вид
'[{"a":1}, {"b":2}, {"c":3}]'
Я его превращаю в json (json_encode), и кладу в бд.
SELECT *
FROM `users`
WHERE FIND_IN_SET(id, ?);
CREATE DEFINER=root@localhost
TRIGGER bi_trigger_in_employees
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.entpr_name = COALESCE( NEW.entpr_name,
( SELECT ap_name
FROM companies
WHERE id = NEW.entpr_id
LIMIT 1
)
),
NEW.employee_name = COALESCE( NEW.employee_name,
( SELECT CONCAT_WS(' ',np_surname,np_name,np_patronymic)
FROM people
WHERE id = NEW.employee_id
LIMIT 1
)
);
тогда да, ошибка на бесконечный цикл. Но тут почему?
CREATE TABLE client ( clientid INT AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(255),
lastname VARCHAR(255),
phone BIGINT, -- если исходный VARCHAR - поменять,
-- либо соотв. преобразование в INSERT
UNIQUE (firstname, lastname, phone) ); -- можно потом удалить
INSERT INTO client (firstname, lastname, phone)
SELECT DISTINCT firstname, lastname, phone
FROM orders_old;
CREATE TABLE order ( orderid INT AUTO_INCREMENT PRIMARY KEY,
ordernumber INT,
clientid INT,
FOREIGN KEY (clientid) REFERENCES client (clientid) );
INSERT INTO order (ordernumber, clientid)
SELECT orders_old.ordernumber, client.clientid
FROM orders_old
JOIN client USING (firstname, lastname, phone);
Нужно каждое слово оборачивать в %?
WHERE name LIKE '%сок%перс%'
, конечно, не пропустит указанные нежелательные записи - но и "Персиковый сок" тоже будет отброшен.SELECT *
FROM table
WHERE name LIKE '%сок%'
AND name LIKE '%перс%';
высвечивает такую ошибку
Нужно игнорировать дублирующиеся данные. Буду делать INSERT IGNORE
В OpenServer -> PHPMyAdmin я создал юзера root1
Вот параметры юзера
DELETE t1
FROM table t1
LEFT JOIN table t2 ON t1.dup_column = t2.dup_column
AND t1.time_column > t2.time_column
WHERE t2.time_column IS NULL
DELETE t1
FROM table t1
JOIN table t2 ON t1.dup_column = t2.dup_column
AND t1.time_column < t2.time_column
Суть задачи удалить все дубли квартир приходящие с разных импортов, по умолчанию считаем что последний файл импорта актуальный