Sql 获取最后一个可用条目
我使用的是Sql 获取最后一个可用条目,sql,mariadb,groupwise-maximum,Sql,Mariadb,Groupwise Maximum,我使用的是10.1.39-MariaDB-MariaDB.org二进制文件,我有下表: | id | date | ticker | close | createdAt | updatedAt | CompanyId | |-------|---------------------|--------|-----------|---------------------|---------------------|-
10.1.39-MariaDB-MariaDB.org二进制文件
,我有下表:
| 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名每日返回值:
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
然而,在周一,我只得到了空的结果,因为市场停滞不前,没有向db输入任何价格
如何克服这个周末的问题并获取数据库中发布的最后一个价格?1方法是使用案例陈述-
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
在您的查询中,我没有看到对当前日期或昨天的引用。因此,除非我读错了,否则它不应该有任何问题weekends@MadhurBhaiya对不起,是我的错。我复制了用于调试的查询。在上面找到中断的查询!为什么不将日期范围从间隔1天增加到间隔2天呢。不管怎样,您都是按日期降序获取数据的。这将处理周末的案件。在正常工作日,它只会获取昨天的数据。您使用的是哪个版本?如果它有LAG()
,则使用它来查找“前一天”。@RickJames,处理此类情况的最佳方法是有一个假日表,并增加该表上的日期。因为OP没有这种情况,所以我没有把它包括在答案中。