0

別々に機能する 2 つのクエリがありますが、それらを 1 つに結合する方法がわかりません。

1 つ目は、次のように植物の入手可能性を計算します。

SELECT *, 
(off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y')) AS A
FROM(
 SELECT equipment_id,
  IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time,
   (CASE  
    WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW())
    WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y')
    ELSE UNIX_TIMESTAMP(time_off)
   END) AS off_time
  FROM r) AS T
GROUP BY equipment_id 

しかし、別のテーブルに保存されているサービスに利用できると識別されたプラントのみを表示したいので、次のようなJOINを使用する必要があると考えています。

SELECT r.equipment_id, r.time_on, r.time_off, i.in_service
FROM r
INNER JOIN i
ON r.equipment_id=i.equipment_id

ただし、この 2 つを組み合わせる試みは失敗に終わります。私は独学でこれに非常に慣れていないので、質問に対する助け、コメント、または批評さえも歓迎します。

4

2 に答える 2

1

こんな感じで参加できます。

SELECT
  *,
  ((off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y'))) AS A
FROM (SELECT
    r.equipment_id,
    i.in_service,
    IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time,
    (CASE WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW()) WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y') ELSE UNIX_TIMESTAMP(time_off) END) AS off_time
      FROM r
    left join i
      ON r.equipment_id = i.equipment_id) AS T
GROUP BY equipment_id
于 2013-02-25T12:41:56.780 に答える
0

私があなたの質問を正しく理解していれば、あなたが探している SQL は次のとおりです。

SELECT *, 
(off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y')) AS A, i.in_service
FROM(
 SELECT equipment_id,
  IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time,
   (CASE  
    WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW())
    WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y')
    ELSE UNIX_TIMESTAMP(time_off)
   END) AS off_time
  FROM r) AS T 
INNER JOIN i
ON T.equipment_id=i.equipment_id
GROUP BY T.equipment_id 
于 2013-02-25T12:42:42.150 に答える