我需要计算日期之间的天数。我有这个查询,它获取问题解决的日期。子查询选择创建问题的日期。
问题是子查询会查询所有已打开问题的日期,而不是获取具有相同问题的日期INCIDENCIA.ID_INCIDENCIA
:
SELECT
INCIDENCIA.ID_INCIDENCIA AS Incidencia,
INCIDENCIA.DESCRIPCION,
SITUACION.FECHA,
SITUACION.FECHA - Inicio.Fecha AS Dias
FROM
INCIDENCIA,
SITUACION,
(SELECT SITUACION.FECHA AS Fecha
FROM SITUACION, INCIDENCIA
WHERE SITUACION.ID_ESTADO = '1' AND INCIDENCIA.ID_INCIDENCIA = SITUACION.ID_INCIDENCIA) Inicio
WHERE
SITUACION.ID_ESTADO = '3' AND
INCIDENCIA.ID_INCIDENCIA = SITUACION.ID_INCIDENCIA
ORDER BY
INCIDENCIA.ID_INCIDENCIA ASC
Run Code Online (Sandbox Code Playgroud)
预期的结果是:
??????????????????????????????????????????????????? ? 1 ? 13 年 10 月 16 日?Averia 路由器 ? 30 ? ? 2 ? 16 年 11 月 16 日?法洛红?28 ? ? 3 ? 22/10/16 ?萨拉请求?37 ? ? 4 ? 19 年 10 月 16 日?Averia ordenador ? 0 ? ? 5 ? 16 年 10 月 29 日?Averia 罪决定因素 ? 1 ? ? 6 ? 10 年 1 月 17 日?Averia conexion ? 136? ???????????????????????????????????????????????????
但我得到了:
??????????????????????????????????????????????????? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?30 ? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?-6 ? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?28 ? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?-6 ? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?-15 ? ? 1 ? Averia 路由器 ? 13 年 10 月 16 日?47 ? ? 2 ? 法洛红?16 年 11 月 16 日?64 ? ? 2 ? 法洛红?16 年 11 月 16 日?28 ? ? 2 ? 法洛红?16 年 11 月 16 日?62 ? ? 2 ? 法洛红?16 年 11 月 16 日?28 ? ? 2 ? 法洛红?16 年 11 月 16 日?19 ? ? 2 ? 法洛红?16 年 11 月 16 日?81 ? ? 3 ? 萨拉请求?22/10/16 ?39 ? ? 3 ? 萨拉请求?22/10/16 ?3 ? ? 3 ? 萨拉请求?22/10/16 ?37 ? ? 3 ? 萨拉请求?22/10/16 ?3 ? ? 3 ? 萨拉请求?22/10/16 ?-6 ? ? 3 ? 萨拉请求?22/10/16 ?56 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?36 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?0 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?34 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?0 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?-9 ? ? 4 ? Averia ordenador ? 19 年 10 月 16 日?53 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?46 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?10 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?44 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?10 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?1 ? ? 5 ? Averia 罪决定因素 ? 16 年 10 月 29 日?63 ? ? 6 ? Averia conexion ? 10 年 1 月 17 日?119? ? 6 ? Averia conexion ? 10 年 1 月 17 日?83 ? ? 6 ? Averia conexion ? 10 年 1 月 17 日?117? ? 6 ? Averia conexion ? 10 年 1 月 17 日?83 ? ? 6 ? Averia conexion ? 10 年 1 月 17 日?74 ? ? 6 ? Averia conexion ? 10 年 1 月 17 日?136? ???????????????????????????????????????????????????
您的子查询与外部查询无关,因此它将行乘以它返回的行数。此外,在我看来,在多个查询级别多次使用相同的表名而没有别名是不好的做法,因为它可能会导致一些意想不到的“惊喜”。您的查询应该是这样的:
SELECT
i1.ID_INCIDENCIA AS Incidencia,
i1.DESCRIPCION,
s1.FECHA,
s1.FECHA - Inicio.Fecha AS Dias
FROM
INCIDENCIA i1,
SITUACION s1,
(SELECT i2.ID_INCIDENCIA as Inicio_ID_INCIDENCIA, s2.FECHA AS Fecha
FROM SITUACION s2, INCIDENCIA i2
WHERE s2.ID_ESTADO = '1' AND i2.ID_INCIDENCIA = s2.ID_INCIDENCIA) Inicio
WHERE
s1.ID_ESTADO = '3' AND
i1.ID_INCIDENCIA = s1.ID_INCIDENCIA
AND Inicio.Inicio_ID_INCIDENCIA = i1.ID_INCIDENCIA
ORDER BY
i1.ID_INCIDENCIA ASC
Run Code Online (Sandbox Code Playgroud)
ID_INCIDENCIA
在子查询内的所有位置添加别名,因此可以根据该列将其连接到外部查询。
归档时间: |
|
查看次数: |
47 次 |
最近记录: |