Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 如何在同一查询中显示一列30天的数据和其余90天的数据?_Mysql_Sql_Subquery - Fatal编程技术网

Mysql 如何在同一查询中显示一列30天的数据和其余90天的数据?

Mysql 如何在同一查询中显示一列30天的数据和其余90天的数据?,mysql,sql,subquery,Mysql,Sql,Subquery,几天前我问了一个问题,通过下面的查询解决了我的问题。我刚刚添加了和t.date\u of_created>date\u SUB(NOW(),INTERVAL 90 DAY)以仅显示90天的数据,并且它正在工作 现在我的问题是,我必须在30天内将SUM(f_filestatus=3)显示为tcount3,其余部分将在90天内显示数据 有什么办法可以这样做吗 SELECT SUM(f_filestatus = 1) AS tcount1, SUM(f_filestatus = 2) AS t

几天前我问了一个问题,通过下面的查询解决了我的问题。我刚刚添加了
和t.date\u of_created>date\u SUB(NOW(),INTERVAL 90 DAY)
以仅显示90天的数据,并且它正在工作

现在我的问题是,我必须在30天内将
SUM(f_filestatus=3)显示为tcount3
,其余部分将在90天内显示数据

有什么办法可以这样做吗

SELECT
  SUM(f_filestatus = 1) AS tcount1,
  SUM(f_filestatus = 2) AS tcount2,
  SUM(f_filestatus = 3) AS tcount3
FROM (
  SELECT t.f_bankid, t.f_filestatus
  FROM tbl_fileStatus t
  WHERE t.f_id = (SELECT f_id FROM tbl_fileStatus WHERE f_bankid = t.f_bankid and t.date_of_created > DATE_SUB(NOW(), INTERVAL 90 DAY) ORDER BY f_id DESC LIMIT 1)
) t

我将使用窗口函数编写您当前的查询:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3) AS tcount3
FROM (SELECT fs.*,
             ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
      FROM tbl_fileStatus fs
      WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
     ) fs
WHERE seqnum = 1;
但你的问题的答案是简单地添加一个新条件:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM (SELECT fs.*,
             ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
      FROM tbl_fileStatus fs
      WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
     ) fs
WHERE seqnum = 1;
编辑:

您可以在旧版本中使用相同的想法:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM tbl_fileStatus fs
WHERE fs.f_id = (SELECT fs2.f_id
                 FROM tbl_fileStatus fs2
                 WHERE fs2.bank_id = fs.bank_id AND
                       fs2.date_of_created > CURDATE() - INTERVAL 90 DAY
                 ORDER BY fs2.f_id DESC
                 LIMIT 1
                )

我将使用窗口函数编写您当前的查询:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3) AS tcount3
FROM (SELECT fs.*,
             ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
      FROM tbl_fileStatus fs
      WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
     ) fs
WHERE seqnum = 1;
但你的问题的答案是简单地添加一个新条件:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM (SELECT fs.*,
             ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
      FROM tbl_fileStatus fs
      WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
     ) fs
WHERE seqnum = 1;
编辑:

您可以在旧版本中使用相同的想法:

SELECT SUM(f_filestatus = 1) AS tcount1,
       SUM(f_filestatus = 2) AS tcount2,
       SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM tbl_fileStatus fs
WHERE fs.f_id = (SELECT fs2.f_id
                 FROM tbl_fileStatus fs2
                 WHERE fs2.bank_id = fs.bank_id AND
                       fs2.date_of_created > CURDATE() - INTERVAL 90 DAY
                 ORDER BY fs2.f_id DESC
                 LIMIT 1
                )

请提供示例数据和所需结果。@GordonLinoff,当然可以,我只是想知道是否可以使用相同的查询?或者我需要使用两个不同的查询?最后一列为30天,其余列为90天?请提供示例数据和所需结果。@GordonLinoff,当然,我只是想知道是否可以使用相同的查询?或者我需要使用两个不同的查询?最后一列30天,休息列90天?抱歉,我的MySql不是8.0+,分区工作与8.0+先生,是的,它正在工作,我们可以设置范围之间的日期吗?我的意思是我只需要显示一个月的记录,日期是01日到31日。到目前为止,它显示了过去30天的记录。对吧?@user9437856。这回答了您在这里提出的问题(“30天”)。如果您有不同的问题,请提出一个新问题,包括适当的样本数据、期望的结果和解释。先生,是的,我知道,我必须针对新要求提出新问题。我尝试将SUM(f_filestatus=3和MONTH(fs.date_of_created)=MONTH(CURRENT_date())作为tcount3。这是正确的方法吗?@user9437856。我想只要你过滤掉前几年的数据就行了。抱歉,我的MySql不是8.0+,分区工作是8.0+,先生,是的,它工作正常,我们可以设置间隔日期吗?我的意思是我只需要显示一个月的记录,日期是01日到31日。到目前为止,它显示了过去30天的记录。对吧?@user9437856。这回答了您在这里提出的问题(“30天”)。如果您有不同的问题,请提出一个新问题,包括适当的样本数据、期望的结果和解释。先生,是的,我知道,我必须针对新要求提出新问题。我尝试将SUM(f_filestatus=3和MONTH(fs.date_of_created)=MONTH(CURRENT_date())作为tcount3。这是正确的方法吗?@user9437856。我认为只要你过滤掉前几年的数据,这就行了。