Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 在表中选择最低日期_Mysql_Sql - Fatal编程技术网

Mysql 在表中选择最低日期

Mysql 在表中选择最低日期,mysql,sql,Mysql,Sql,我有一个带有日期条件的查询: SELECT MIN(date(a.changedttm)) as date, f.pcode, g.theme_name, h.ecode, c.take, c.plan_start, c.plan_end FROM sctrail a, working_scene b, working_episode c, working_project d, master_sce

我有一个带有日期条件的查询:

SELECT
    MIN(date(a.changedttm)) as date,
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take,
    c.plan_start,
    c.plan_end 
FROM
    sctrail a,
    working_scene b,
    working_episode c,
    working_project d,
    master_scene e,
    master_project f,
    ref_themes g, 
    master_episode h,
    ref_status j
WHERE
    a.fkwsid = b.wsid
    AND b.fkweid=c.weid
    AND c.fkeid=h.eid
    AND c.fkwpid=d.wpid
    AND b.fksid = e.sid
    AND d.fkpid = f.pid
    AND d.fkrftid = g.rftid
    AND b.status=j.rsid
    AND date(a.changedttm) >= '$start_month'
    AND date(a.changedttm) <= '$end_month'
    AND a.appliedstatus != '0'
GROUP BY
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take
ORDER BY
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take;
它工作正常,除了一件事,MINdatea.changedttm是在给定的日期范围内选择的

因此,如果我从2019-10-01搜索到2019-10-31,它将只为该范围选择最低日期,但我希望找到整个时间的最低日期

是否有方法更改查询,从整个表中选择MINdatea.changedttm,但将日期范围保留在WHERE内?

尝试将WHERE日期范围限制移动到第一次连接的条件下 创建一个sctrail表,并将第一个联接设为左联接。这将防止sctrail中的任何记录因该联接而被过滤掉

SELECT
    MIN(DATE(a.changedttm)) AS date,
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take,
    c.plan_start,
    c.plan_end 
FROM sctrail a
LEFT JOIN working_scene b
    ON a.fkwsid = b.wsid AND
       DATE(a.changedttm) BETWEEN '$start_month' AND '$end_month'
INNER JOIN working_episode c
    ON b.fkweid = c.weid
INNER JOIN working_project d
    ON c.fkwpid = d.wpid
INNER JOIN master_scene e
    ON b.fksid = e.sid
INNER JOIN master_project f
    ON d.fkpid = f.pid
INNER JOIN ref_themes g
    ON d.fkrftid = g.rftid
INNER JOIN master_episode h
    ON c.fkeid = h.eid
INNER JOIN ref_status j
    ON b.status = j.rsid
WHERE
    a.appliedstatus != '0'
GROUP BY
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take,
    c.plan_start,
    c.plan_end
ORDER BY
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take;

我用现代显式连接取代了传统的隐式连接,这是现在编写SQL的首选方法,并且已经使用了25年多。另外,我在GROUPBY子句中增加了一些列,以使您的查询有效。

这是您的查询,您可以添加包含mindate子查询的列


要做到这一点,您需要加入一个单独的select语句,以在相同的结果集中获得最低的日期值。类似于左连接选择1作为参考,MINdate作为MINdate FROM。。由于_mindateon _minDate.ref=main.ref如果WHERE子句限制在某个范围内,则唯一可用的最低日期是该范围的起点。一些示例数据在这里非常有用。请使用适当的连接。它已经存在超过25年了!我怀疑OP希望查询范围内的最小changedttm日期,但不包括WHERE范围限制。看看我们中谁是对的将是有趣的^^
SELECT
    (SELECT MIN(date(changedttm)) FROM sctrail) as date,
    f.pcode,
    g.theme_name,
    h.ecode,
    c.take,
    c.plan_start,
    c.plan_end
FROM sctrail a,
INNER JOIN working_scene b ON a.fkwsid = b.wsid
INNER JOIN working_episode c ON b.fkweid = c.weid,
INNER JOIN working_project d ON c.fkeid = h.eid
INNER JOIN master_scene e ON c.fkwpid = d.wpid
INNER JOIN master_project f ON b.fksid = e.sid
INNER JOIN ref_themes g ON d.fkpid = f.pid
INNER JOIN master_episode h ON d.fkrftid = g.rftid
INNER JOIN ref_status j ON b.status = j.rsid
WHERE date(a.changedttm) >= '$start_month'
    AND date(a.changedttm) <= '$end_month'
    AND a.appliedstatus != '0'
ORDER BY f.pcode, g.theme_name, h.ecode, c.take;