获取最后一个可用条目
Get last available entry
我正在使用 10.1.39-MariaDB - mariadb.org binary
并且我有以下 table:
| id | date | ticker | close | createdAt | updatedAt | CompanyId |
|-------|---------------------|--------|-----------|---------------------|---------------------|-----------|
| 39869 | 2019-09-18 00:00:00 | AAPL | 221.96160 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39870 | 2019-09-17 00:00:00 | AAPL | 220.70000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39871 | 2019-09-16 00:00:00 | AAPL | 219.90000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39872 | 2019-09-13 00:00:00 | AAPL | 218.75000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39873 | 2019-09-12 00:00:00 | AAPL | 223.09000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
此外,我有以下查询以获得最后一天的前 5 daily_returns
:
SELECT *
FROM (SELECT prices.*,
CAST((`close` - @old_close) / @old_close AS DECIMAL(20, 10)) AS daily_return,
@old_close := `close`
FROM prices,
(SELECT @old_close := 0 AS) AS t
ORDER BY ticker,
`date` ASC) AS tt
WHERE DATE >= DATE(NOW()) - INTERVAL 1 DAY
ORDER BY `date` DESC,
daily_return DESC
LIMIT 5
但是,周一我只得到空结果,因为市场停滞不前,没有任何价格输入数据库。
如何克服这个周末的问题并采用数据库中发布的最后价格?
1 个方法使用 CASE 语句 -
SELECT *
FROM (SELECT prices.*,
CAST((`close` - @old_close) / @old_close AS DECIMAL(20, 10)) AS daily_return,
@old_close := `close`
FROM prices,
(SELECT @old_close := 0 AS) AS t
ORDER BY ticker,
`date` ASC) AS tt
WHERE DATE >= CASE WHEN DAYNAME(NOW()) = 'Monday' THEN DATE(NOW()) - INTERVAL 3 DAY -- OR 2 DAY, DEPENDS UPON YOUR REQUIREMENT
ELSE DATE(NOW()) - INTERVAL 1 DAY END
ORDER BY `date` DESC,
daily_return DESC
LIMIT 5
我正在使用 10.1.39-MariaDB - mariadb.org binary
并且我有以下 table:
| id | date | ticker | close | createdAt | updatedAt | CompanyId |
|-------|---------------------|--------|-----------|---------------------|---------------------|-----------|
| 39869 | 2019-09-18 00:00:00 | AAPL | 221.96160 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39870 | 2019-09-17 00:00:00 | AAPL | 220.70000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39871 | 2019-09-16 00:00:00 | AAPL | 219.90000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39872 | 2019-09-13 00:00:00 | AAPL | 218.75000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
| 39873 | 2019-09-12 00:00:00 | AAPL | 223.09000 | 2019-09-18 19:25:30 | 2019-09-18 19:25:30 | 238 |
此外,我有以下查询以获得最后一天的前 5 daily_returns
:
SELECT *
FROM (SELECT prices.*,
CAST((`close` - @old_close) / @old_close AS DECIMAL(20, 10)) AS daily_return,
@old_close := `close`
FROM prices,
(SELECT @old_close := 0 AS) AS t
ORDER BY ticker,
`date` ASC) AS tt
WHERE DATE >= DATE(NOW()) - INTERVAL 1 DAY
ORDER BY `date` DESC,
daily_return DESC
LIMIT 5
但是,周一我只得到空结果,因为市场停滞不前,没有任何价格输入数据库。
如何克服这个周末的问题并采用数据库中发布的最后价格?
1 个方法使用 CASE 语句 -
SELECT *
FROM (SELECT prices.*,
CAST((`close` - @old_close) / @old_close AS DECIMAL(20, 10)) AS daily_return,
@old_close := `close`
FROM prices,
(SELECT @old_close := 0 AS) AS t
ORDER BY ticker,
`date` ASC) AS tt
WHERE DATE >= CASE WHEN DAYNAME(NOW()) = 'Monday' THEN DATE(NOW()) - INTERVAL 3 DAY -- OR 2 DAY, DEPENDS UPON YOUR REQUIREMENT
ELSE DATE(NOW()) - INTERVAL 1 DAY END
ORDER BY `date` DESC,
daily_return DESC
LIMIT 5