#mysql #sql
#mysql #sql
Вопрос:
Извините, что название вопроса немного сбивает с толку, но я просто не могу найти простой способ обобщить вопрос. Давайте начнем с примера.
Есть продукт A, и я должен отслеживать две функции X и Y A. X генерируется каждый день, в то время как Y генерируется ежемесячно. Чтобы сэкономить место, я решаю поместить X, Y в две таблицы, а именно таблицу X и таблицу Y. Итак, таблица X имеет два столбца: date и X; Таблица Y имеет два столбца: date и Y. Однако даты в двух таблицах встречаются с разной частотой. Я хочу соединить две таблицы слева по X, но мне нужно, чтобы отсутствующее значение в Y было заполнено наблюдением за последний месяц.
Таблица X — это:
date X
---------- -------------
2019-01-01 1
2019-01-02 2
2019-01-02 3
... ...
2019-02-01 32
2019-02-02 33
Таблица Y — это:
date Y
---------- -------------
2019-01-01 0
2019-02-01 1
Таблица, которую я хочу запросить, является:
date X Y
---------- ------------- ----------
2019-01-01 1 0
2019-01-02 2 0
2019-01-02 3 0
... ... ...
2019-01-31 31 0
2019-02-01 32 1
2019-02-02 33 1
Таблица X:
Таблица Y:
Таблица, которую я хочу запросить:
Комментарии:
1. Большинству людей здесь нужны образцы табличных данных и ожидаемый результат в виде форматированного текста, а не в виде изображений или ссылок на изображения,
2. Спасибо, что напомнили мне, я только что изменил свой вопрос.
3. Итак, каков на самом деле формат даты в таблицах X и Y? на ваших изображениях это 2019/1/1, в вашем тексте это 2019-01-01.
4. Дата — это данные типа datetime, а не строка.
Ответ №1:
Что-то вроде этого:
SELECT x.date,
x.x,
y.y
FROM x
JOIN y
ON YEAR(x.date) = YEAR(y.date)
AND MONTH(x.date) = MONTH(y.date);
Комментарии:
1. Вероятно, вам нужно внешнее соединение.
Ответ №2:
Правильное объединение и ПОРЯДОК ПО должны сделать это
SELECT x.date, x.X, y.Y
FROM X x
RIGHT JOIN Y y ON YEAR(x.date) = YEAR(y.date) AND MONTH(x.date) = MONTH(y.date)
ORDER BY x.date ASC
Ответ №3:
SELECT
a.Column1,
a.column2,
b.column3
FROM tablename LEFT JOIN anothertable b
ON a.column1 = b.column2;
Комментарии:
1. Можете ли вы объяснить это подробнее? Я не видел столбцов с такими именами в примере данных
2. ну, это было просто для справки
3. Для какой ссылки? Для простого объединения? Как это справляется с требованием «разных идентификаторов»?