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没有这种情况,所以我没有把它包括在答案中。