1

次の結果セットがあります。

275     72.87368055555555555555555555555555555556   foo
275     72.87390046296296296296296296296296296296   foo
113     77.06431712962962962962962962962962962963   foo
113     77.07185185185185185185185185185185185185   foo

私がこのクエリから得たもの:

SELECT id, (tbl2.date_modified - tbl1.date_submitted)/86400, some_value
FROM tbl1, tbl2, tbl3
WHERE tbl1.id = tbl2.fid 
AND tbl1.id = tbl3.fid

これを取得するためにどのように変更できますか?

275     72.87368055555555555555555555555555555556   foo
113     77.06431712962962962962962962962962962963   foo

つまり、最小の行のみを取得します some_number

サブクエリか何か?

どうもありがとう :)。

4

2 に答える 2

3

some_valueがフィールド名の場合:

SELECT id, min((tbl2.date_modified - tbl1.date_submitted)/86400), max(some_value)
FROM tbl1, tbl2, tbl3
WHERE tbl1.id = tbl2.fid 
AND tbl1.id = tbl3.fid
GROUP BY tbl1.id

some_valueが定数文字列の場合:

SELECT id, min((tbl2.date_modified - tbl1.date_submitted)/86400), 'some_value'
FROM tbl1, tbl2, tbl3
WHERE tbl1.id = tbl2.fid 
AND tbl1.id = tbl3.fid
GROUP BY tbl1.id
于 2012-09-08T15:00:18.520 に答える
0

これをサブクエリでラップできます。

SELECT x.id,
  min(result),
  x.some_value
FROM
(
  SELECT id, 
    (tbl2.date_modified - tbl1.date_submitted)/86400 result, 
    some_value
  FROM tbl1, tbl2, tbl3
  WHERE tbl1.id = tbl2.fid 
    AND tbl1.id = tbl3.fid
) x
group by x.id, x.some_value

提案として、次のように、テーブル間のコンマの代わりにANSI結合構文を使用するようにクエリを書き直す場合があります。

SELECT x.id,
  min(result),
  x.some_value
FROM
(
  SELECT id, 
    (tbl2.date_modified - tbl1.date_submitted)/86400 result, 
    some_value
  FROM tbl1
  INNER JOIN tbl2
    ON tbl1.id = tbl2.fid
  INNER JOIN tbl3
     ON tbl1.id = tbl3.fid
) x
group by x.id, x.some_value

またはMIN()、サブクエリなしで元の関数に関数を追加して、GROUP BY

  SELECT id, 
    MIN((tbl2.date_modified - tbl1.date_submitted)/86400) result, 
    some_value
  FROM tbl1, tbl2, tbl3
  WHERE tbl1.id = tbl2.fid 
    AND tbl1.id = tbl3.fid
  GROUP BY id, some_value
于 2012-09-08T15:10:43.730 に答える