MySQL 8 Case-когда пострадал, где пунктMySql

Форум по Mysql
Ответить
Anonymous
 MySQL 8 Case-когда пострадал, где пункт

Сообщение Anonymous »

У меня есть таблица saa_prices (id, символ, цена, дата). И я создаю представление, чтобы запросить ежеквартальные цены. < /P>

Код: Выделить всё

CREATE OR REPLACE VIEW saa_quarterly_prices_final1 AS
WITH last_dates AS (
SELECT
symbol,
MAX(date) AS last_date,
YEAR(MAX(date)) AS report_year,
QUARTER(MAX(date)) AS report_quarter
FROM
saa.saa_prices
GROUP BY
symbol, YEAR(date), QUARTER(date)
)
SELECT
p.symbol,
ld.last_date AS date,
p.price,
ld.report_year AS year,
ld.report_quarter AS quarter,
CASE ld.report_quarter
WHEN 1 THEN CAST(CONCAT(ld.report_year, '-03-31') AS DATE)
WHEN 2 THEN CAST(CONCAT(ld.report_year, '-06-30') AS DATE)
WHEN 3 THEN CAST(CONCAT(ld.report_year, '-09-30') AS DATE)
WHEN 4 THEN CAST(CONCAT(ld.report_year, '-12-31') AS DATE)
END AS report_date
FROM
last_dates ld
JOIN
saa.saa_prices p ON ld.symbol = p.symbol AND ld.last_date = p.date;
< /code>
Запрос : < /p>
SELECT p.* FROM saa.saa_quarterly_prices_final1 p
WHERE p.symbol IN ('600519') AND p.report_date > '2025-01-01';
< /code>
Результат запроса: < /p>



 symbol < /th>
< /th> < /br /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> < /th> />  четверть < /th>
 report_date < /th>
< /tr>
< /thead>


 600519 < /td>
 2025-03-31 < /td>
 1561 < /td>  1561 < /td>  156-03-31 />  2025 < /td>
 1 < /td>
 2020-03-31 < /td>
< /tr>

 600519 < /td>
 2025-06-30  600519 < /td>
 2025-06-30 . />1409.52
 2025 < /td>
 2 < /td>
 2020-03-31 < /td>


 600519 < /td>

 600519 < /td> />  2025-07-31 < /td>
1421.67>  2025 < /td>
 3 < /td>
 2020-03-31 < /td>
< /tr>

/> 
Почему год 
, Quarter рассчитывается правильно, но отчет_дат всегда является '2020-03-31' и конфликтует с тем, где оператор?SELECT p.*,
CASE p.quarter
WHEN 1 THEN CAST(CONCAT(p.year, '-03-31') AS DATE)
WHEN 2 THEN CAST(CONCAT(p.year, '-06-30') AS DATE)
WHEN 3 THEN CAST(CONCAT(p.year, '-09-30') AS DATE)
WHEN 4 THEN CAST(CONCAT(p.year, '-12-31') AS DATE)
END AS report_date1
FROM saa.saa_quarterly_prices_final1 p
WHERE p.symbol IN ('600519') AND p.report_date > '2025-01-01';
< /code>
Результат: < /p>



symbol < /th>
date < /th>
< /th> < /th> < /th> < /th> < /th>
/>quarter
report_date
report_date1




600519
2025-03-31
1561 < /td>
2025 < /td>
1 < /td>
2020-03-31 < /td>
2025-03-31 < /td>
< /tr>
/> 600519 < /td>
2025-06-30 < /td>
1409.52
2025 < /td>
2 < /td>
2020-03-31 < /td> < /td>
2020-03-31 < /td> < /td>
2020-03-31 < /td> < /td>
2020-03-31 < /> /> 2025-06-30 < /td>
< /tr>

600519 < /td>
2025-07-31 < /td>
1421.67> 202 < /td> 202 < /td> 202 < /td> 202 < /td> 202 < /td> 202 < /td> 202 /> 3
2020-03-31
2025-09-30




Подробнее здесь: https://stackoverflow.com/questions/797 ... ere-clause
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»