2

簡略化して以下に記述したクエリがあります。2 つの別々のインライン select ステートメントとして計算された 2 つのフィールドの時間差を表示するにはどうすればよいですか?

SELECT x.name ,
   ( SELECT data.ts 
     FROM data 
     WHERE prim_key = x.prim_key and roll_no ='1'  
 ) **starttime** ,
  ( SELECT data.ts 
    FROM woman_data 
    WHERE prim_key = x.prim_key and roll_no ='10'

) **endtime**
, **TIME_TO_SEC( TIMEDIFF( endtime , starttime)** as timediff // This line does not work.It cannot recognize endtime ans starttime
FROM data x 
     INNER JOIN  y 
ON x.prim_key = y.prim_key
ORDER BY x.prim_key
4

2 に答える 2

0

これを試して:

starttimeとendtimeは派生列であるため、同じselectステートメントで使用することはできません。派生テーブルを作成してから、これらの列を外部のクエリで使用する必要があります。

select name,starttime,endtime,TIME_TO_SEC( TIMEDIFF( endtime , starttime) as timediff
from(
SELECT x.name ,
   ( SELECT data.ts 
     FROM data 
     WHERE prim_key = x.prim_key and roll_no ='1'  
 ) starttime ,
  ( SELECT data.ts 
    FROM woman_data 
    WHERE prim_key = x.prim_key and roll_no ='10'

) endtime

FROM data x 
     INNER JOIN  y 
ON x.prim_key = y.prim_key)a
ORDER BY x.prim_key
于 2012-09-10T09:24:40.773 に答える
0

「外部レベル」を持つようにクエリを変更する最も簡単な方法は次のとおりです。

SELECT
name,
starttime,
endtime,
TIME_TO_SEC( TIMEDIFF( endtime , starttime)) as timediff
FROM(
 SELECT
 x.prim_key,
 x.name ,
   ( SELECT data.ts 
     FROM data 
     WHERE prim_key = x.prim_key and roll_no ='1'  
 ) starttime ,
  ( SELECT data.ts 
    FROM woman_data 
    WHERE prim_key = x.prim_key and roll_no ='10'

) endtime

FROM data x 
     INNER JOIN  y 
ON x.prim_key = y.prim_key
) n
ORDER BY n.prim_key
于 2012-09-10T09:22:02.507 に答える