Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从数据库表mysql获取最后日期_Sql_Mysql - Fatal编程技术网

如何从数据库表mysql获取最后日期

如何从数据库表mysql获取最后日期,sql,mysql,Sql,Mysql,我的数据库里有这个表 类别支持->id,类别id,支持id,日期 问题是,我需要提取所有支持id,其中日期是从现在起最接近的日期 像这样的。。。如果数据库表中有 id, category_id, support_id, date 1 1 1 2010-11-23 2 1 2 2010-11-25 3 1 1 2010-11-26 4 1

我的数据库里有这个表

类别支持->id,类别id,支持id,日期

问题是,我需要提取所有支持id,其中日期是从现在起最接近的日期

像这样的。。。如果数据库表中有

id, category_id, support_id, date
1       1             1       2010-11-23
2       1             2       2010-11-25
3       1             1       2010-11-26
4       1             3       2010-11-24
我需要得到公正

id, category_id, support_id, date
2       1             2       2010-11-25
3       1             1       2010-11-26
4       1             3       2010-11-24
所以为了更好的理解。。。我需要每个支持的最近日期,我只有过去的日期。。。 我一直在努力,但我不知道如何

答:答案是“where date是距离现在最近的日期…”: 注:

您可以设置限制n以选择更多日期的条目。 如果只需要最后一个日期,可以将中的替换为=,因为子选择将只返回一个值。 如果您的表中包含未来日期,请使用ORDER BY ABSNOW-date ASC替换ORDER BY date DESC。 具有连接的解决方案。只有当您有过去的日期时,才有效

SELECT a.*
FROM `categoriesSupports` AS a
LEFT JOIN `categoriesSupports` AS b
    ON b.date > a.date
WHERE b.id IS NULL
添加仅供参考

B.这回答了“包括今天在内的过去3天内的日期”:
这回答了问题的最新版本

以下内容应能为您提供:

当前日期的所有类别支持一个或多个 存在一个以前的类别支持 存在一个未来的类别支持

(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` < CURDATE()
  ORDER BY `date` DESC
  LIMIT 1
)

UNION

(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` = CURDATE()
)

UNION

(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` > CURDATE()
  ORDER BY `date` ASC
  LIMIT 1
)
在这里,你必须决定什么是你最接近的意思。我用了3个作为样本。这将列出日期值小于或等于3的记录


希望这就是您想要的。

您需要定义“最近”的含义。这是一个非常开放的术语。@Brettski不,不是。看看我的答案,了解为什么。@juan你的表中有未来的日期吗?哈哈哈,对我来说,最近的日期是指最近的日期到现在。。。到那时,如果今天是26,那么这些支持的最近日期是25/26/24,因为支持1的23远比26@juan,您需要澄清您的问题,似乎每个人都不知道“最近”是什么意思,请确定这一点以获得正确的答案。@Roopesh我添加了一条注释,说明如何将第一个查询更改为与未来日期一起使用,但我怀疑他是否需要这样。第二个查询仅供参考,不应使用它来支持第一个查询。@alin对于我上面的示例,这将只返回id=3。。。我需要得到每个人最近的通过日期support@alin不,不。。。如果你做了第一个答案,它只会返回表中的2010-11-26日期,因为这是从今天开始最接近的日期。。。但是,如果我有其他日期为2010-11-25的支持,查询将不会返回该支持,因为没有搜索其他日期最接近的支持…只需查看上面的示例和希望返回的变量,您就会明白我的意思mean@juan然后使用选项B。我给了你很多选择。用一个适合你的。
SELECT *
FROM `categoriesSupports`
WHERE DATEDIFF(NOW(), `date`) < 3
SELECT a.*
FROM `categoriesSupports` AS a
LEFT JOIN `categoriesSupports` AS b
    ON b.support_id = a.support_id AND b.date > a.date
WHERE b.id IS NULL
(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` < CURDATE()
  ORDER BY `date` DESC
  LIMIT 1
)

UNION

(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` = CURDATE()
)

UNION

(
  SELECT *
  FROM `categoriesSupports`
  WHERE `date` > CURDATE()
  ORDER BY `date` ASC
  LIMIT 1
)
SELECT * 
FROM CurrentDeals
WHERE (julianday(Date('now')) - julianday(date))<=3
ORDER BY date ASC