select t1.*, t2.*
from table1 t1
join table2 t2 on t2.field1 = t1.field1
and t2.field2 = t1.field2
and ... -- сравниваем все поля
select t1.* from table1 t1
UNION
select t2.* from table2 t2
MINUS
select t1.*
from table1 t1
join table2 t2 on t2.field1 = t1.field1
and t2.field2 = t1.field2
and ... -- сравниваем все поля
update tab1 t1, tab2 t2 // таблицы, участвующие в Update
set t1.key = ? // устанавливаем параметр key, только непонятно, что задаем
where t1.id = t2.id // соответствие записей по первичным ключам
update tab1 t1, tab2 t2 // таблицы, участвующие в Update
set t1.key = ? // устанавливаем параметр key, только непонятно, что задаем
where t1.SecondName = t2.SecondName // допустим, пусть будет обновление key у тех записей, у которых есть полное соответствие атрибутов.
and t1.LastName = t2.LastName
and t1.ThirdName = t2.ThirdName
При этом достаю только те значения, которые имеют самый старший "ключ"
select last_move.book_id, last_move.rack_id, last_move.board_id, -- последнее местонахождение книги
first_move.date_from, -- дата первого появления на складе
last_move.date_to -- дата последнего перемещения
from
-- подзапрос, получаем первые записи появления каждой книги на складе
(select *
from (select t.*, rank() over (partition by t.book_id order by t.date_from) rnk
from table t)
where rnk = 1) first_move
join
-- подзапрос, получаем последние записи перемещения каждой книги на складе
(select *
from (select t.*, rank() over (partition by t.book_id order by t.date_from DESC) rnk
from table t)
where rnk = 1) last_move
-- сопоставляем записи
on first_move.book_id = last_move.book_id
SELECT t.event_date, -- атрибут таблицы типа datetime, для которого определяем интервал, выведен для того, чтобы наблюдать за процессом отладки
case -- SQL-конструкция вида "case when ... then ... else ... end", с помощью которой можно выводить не только конкретное значение атрибута, но и задавать условие, при котором конечное значение результата будет вычисляться по-разному в пределах одной выбранной записи.
when TIME_TO_SEC(t.event_date) >= inter.begin AND TIME_TO_SEC(t.event_date) <= inter.end -- если t.event_date, выраженное в суточных секундах, находится в отрезке [inter.begin, inter.end], также выраженных в суточных секундах,...
then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width) -- ... то вычисляем количество полных интервалов
else null -- иначе, если время не попадает в период отслеживания, то выводим "пусто", чтобы явно указать, что значение не находится в интересуемом периоде
end as full_interval_number -- кол-во прошедших полных интервалов, начинается с 0
FROM table t, -- ваша таблица
(select TIME_TO_SEC('09:00:00') as begin, -- начало дневного периода
TIME_TO_SEC('18:00:00') as end, -- конец дневного периода
TIME_TO_SEC('00:15:00') as width -- ширина интервала
) inter -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке
SELECT *
from (SELECT servers.id,
servers.game,
servers.votes,
@n := @n + 1 AS rank
FROM servers, (SELECT @n := 0) r
ORDER BY servers.votes DESC) a
where id = 3
/*Функция преобразования выборки в матрицу */
function get_matrix($rows)
{
// получаем все значения по id - измерению матрицы (строки матрицы)
// можно сделать запросом select distinct id from table order by id
foreach($rows as $row)
$id_dem[$row['id']] = 1;
// получаем все значения по date - измерению матрицы (столбцы матрицы)
// можно сделать запросом select distinct date from table order by date
foreach($rows as $row)
$date_dem[$row['date']] = 1;
$map = null; // если нет значений размерности матрицы, то функция вернет null
// получаем карту не-null значений - непустые ячейки матрицы
foreach($rows as $row)
$map[$row['id']][$row['date']] = $row['count'];
// дополняем карту null значениями - получаем полноценную матрицу
if(isset($id_dem) && isset($date_dem))
foreach($id_dem as $id => $val_id)
foreach($date_dem as $date => $val_date)
$map[$id][$date] = array_key_exists($id, $map) && array_key_exists($date, $map[$id])
? $map[$id][$date] : null;
return $map;
}
select u.user_id, w.wallet_id, wa.value as address
from users u
join wallet_address wa on wa.user_id = u.user_id
join wallets w on w.wallet_id = wa.wallet_id
where wa.value is not null
select count(*) as cnt
from (select user_id
from table
group by user_id)