选择最新的MAX()和MIN() - WebSQL

时间:2015-02-04 20:12:06

标签: mysql sqlite web-sql

我建立了一个练习网络应用程序,我正在使用这样的两个表:

表1:weekly_stats

| id |    code      |      type          |       date |     time |
|----|--------------|--------------------|------------|----------|
|  1 |           CC |                  1 | 2015-02-04 | 19:15:00 |
|  2 |           CC |                  2 | 2015-01-28 | 19:15:00 |
|  3 |          CPC |                  1 | 2015-01-26 | 19:15:00 |
|  4 |          CPC |                  1 | 2015-01-25 | 19:15:00 |
|  5 |           CP |                  1 | 2015-01-24 | 19:15:00 |
|  6 |           CC |                  1 | 2015-01-23 | 19:15:00 |
| .. |          ... |                ... |    ...     |    ...   |

表2:global_stats

| id | exercise_number |correct |   wrong   |
|----|-----------------|--------|-----------|
|  1 |             138 |      1 |         0 |
|  2 |             246 |      1 |         0 |
|  3 |             988 |      1 |        10 |
|  4 |              13 |      5 |         0 |
|  5 |               5 |      4 |         7 |
|  6 |               5 |      4 |         7 |
| .. |             ... |    ... |       ... |

我想要的是获得MAX(正确错误)和MIN(正确错误),现在我正在使用此查询:

SELECT
  exercise_number,
  date,
  time
FROM weekly_stats AS w JOIN global_stats AS g
ON w.id=g.id 
WHERE correct - wrong = (SELECT MAX(correct - wrong) from global_stats)
UNION
SELECT
  exercise_number,
  date,
  time
FROM weekly_stats AS w JOIN global_stats AS g
ON w.id=g.id 
WHERE correct - wrong = (SELECT MIN(correct - wrong) from global_stats);

此查询工作正常,除了一件事:当" WHERE正确 - 错误=(SELECT MIN(正确 - 错误)[...]"选择多行,选择的行是第一行,但我想返回最新的(换句话说:按日期时间(日期,时间)排序)。是否可能?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你可以这样解决:

SELECT * FROM (
    SELECT
      1 as sort_column,
      exercise_number,
      date,
      time
    FROM weekly_stats AS w JOIN global_stats AS g
    ON w.id=g.id 
    WHERE correct - wrong = (SELECT MAX(correct - wrong) from global_stats)
    ORDER BY date DESC, time DESC
    LIMIT 1 ) as a
UNION
SELECT * FROM (
    SELECT
      2 as sort_column,
      exercise_number,
      date,
      time
    FROM weekly_stats AS w JOIN global_stats AS g
    ON w.id=g.id 
    WHERE correct - wrong = (SELECT MIN(correct - wrong) from global_stats)
    ORDER BY date DESC, time DESC
LIMIT 1) as b
ORDER BY sort_column;

以下是关于UNION如何运作的documentation