在mysql表/视图中的特定多行上执行布尔逻辑

时间:2012-03-16 00:42:57

标签: mysql

我在论坛上搜索了一个解决方案,但这些例子对我来说没有意义。我知道我的语法不正确,但这是我想要了解的想法。

假设查询是在2012-03-09 24:00:00运行的。 (我想我正确编辑了虚拟值)

task_status是一个视图,running =(开始>结束),ran =((now() - 结束)< 10h)

select * from task_status;
+----------------+---------------------+---------------------+---------+------+
| task           | began               | ended               | running | ran  |
+----------------+---------------------+---------------------+---------+------+
| MIRRORS_SPLIT  | 2012-03-09 19:15:48 | 2012-03-09 19:15:51 |       0 |    1 |
| NETWORK_BACKUP | 2012-03-09 19:25:01 | 2012-03-09 19:23:41 |       0 |    1 |
| TAPE_BACKUP    | 2012-03-09 19:26:01 | 2012-03-09 23:16:32 |       0 |    1 |
+----------------+---------------------+---------------------+---------+------+

我在创建BACKUPS行began=(MIN(NETWORK_BACKUP.began, TAPE_BACKUP.began)end=(MAX(NETWORK_BACKUP.end, TAPE_BACKUP.end)时遇到问题。运行和运行应该正确评估,对吗?

我想添加一行结果:

| BACKUPS        | 2012-03-09 19:25:01 | 2012-03-09 23:16:32 |       0 |    1 |

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

使用MIN()和MAX()的方式似乎不对,请记住,这些是聚合函数。它们处理由您作为参数传递的列的内容定义的一组值。

似乎您希望它们通过传递两个参数来告诉您两个不同行的开始和结束值的MIN或MAX值。 (除非我没有正确理解你的伪语法)。

你不是在寻找像

这样的东西
SELECT 'BACKUPS', MIN(began), MAX(ended) 
FROM task_status WHERE task = 'NETWORK_BACKUP' OR task = 'TAPE_BACKUP'
GROUP BY task

答案 1 :(得分:0)

谢谢你,JustDanyul,让我走上正轨。

这是我最终使用的内容。

SELECT 0 =
  (
  SELECT 
  (
    (SELECT ran FROM expect.task_status WHERE task='NETWORK_BACKUP') 
    +
    (SELECT ran FROM expect.task_status WHERE task='TAPE_BACKUP')
  )
)