- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试生成一个从两个表派生的列表。最终结果应该是:
Date A OHS OMSN OMSS
date1 1 1 2 3
date2 4 5 6 7
date... .. .. .. ..
日期范围是根据我生成的日历表生成的,并且是正确连接的,因此即使其他建筑物的计数为 0,它们也会被包含在内。在每个建筑物下都有一个计数,应该简单地计算每个建筑物的工单天。这是我到目前为止的查询:
Select calendar.datefield As 'Date',
Count(FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d')) As 'Count'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
Group By calendar.datefield
此查询为我提供了特定范围内每天所有地点的工作订单总数。包括这个很好,但我想要再有 3 列,由每个特定位置过滤。如果我像这样添加建筑物名称:
Select calendar.datefield As 'Date', workorders.location,
Count(FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d')) As 'Count'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
Group By calendar.datefield, workorders.location
然后该表为我提供了我需要的数据,但没有提供我正在查找的列。数据将是这样的:
2011-09-08 OHS 27
2011-09-09 OHS 24
2011-09-10 NULL 0
2011-09-11 NULL 0
2011-09-12 OHS 23
2011-09-13 OHS 18
2011-09-13 OMS-N 1
2011-09-14 OHS 20
我想通过选择日期、然后是 OHS 的数字、OMSN 的数字、OMSS 的数字等来从此查询中提取信息...
必须有一种更简单的方法来做到这一点,我确实花了一整天的时间试图将这个查询拼凑在一起。
希望有人能帮忙。在过去的几个月里,我快速学习了 mysql,非常感谢任何帮助。
__进一步审查:
SELECT calendar.datefield, tOHS.Count AS 'OHS'
FROM calendar
LEFT JOIN (
SELTCT workorders.school, Count( workorders.dateSubmitted ) AS 'Count', FROM_UNIXTIME( workorders.dateSubmitted, '%Y-%m-%d' ) AS test
FROM workorders
RIGHT JOIN calendar ON ( FROM_UNIXTIME( workorders.dateSubmitted, '%Y-%m-%d' ) = calendar.datefield )
WHERE calendar.datefield
BETWEEN '2011-08-30'
AND date_format( now( ) , '%Y-%m-%d' )
AND School = 'OHS'
GROUP BY calendar.datefield, workorders.school
)tOHS ON calendar.datefield = tOHS.test
WHERE calendar.datefield
BETWEEN '2011-08-30'
AND date_format( now( ) , '%Y-%m-%d' )
这将返回第一个位置 OHS 的日期和每日计数。当我尝试这个时:
select calendar.datefield, tOHS.Count as 'OHS'
from calendar
LEFT JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as test
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d') AND School = 'OHS'
Group By calendar.datefield,workorders.school
) tOHS
on calendar.datefield = tOHS.test
LEFT JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as test
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d') AND School = 'OMS-S'
Group By calendar.datefield,workorders.school
) tOMSS
on calendar.datefield = tOHS.test
WHERE calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
它破坏了整个查询。我看到所有列都重复相同的日期和相同的值。我使用了错误的连接吗?
最佳答案
经过几个小时的研究和重新思考,我决定了如何做到这一点。基本上,我们需要选择每个字段(calendar.datefield、位置 1 的计数、位置 2 的计数、位置 3 的计数...)
为了获得计数,我对右连接到日历的子查询进行了 LEFT OUTER JOIN。这使得子查询返回每一天的计数(按每个日历日分组),并将其左外连接(如几秒钟前提到的)到calendar.datefield,然后通过日期a和b之间的where子句进行过滤.
然后冲洗并重复每个子查询的左外连接。我不是 SQL 大师,也从未上过学,所以它可能没有优化或完美,但它可以工作,而且工作得相当快。我很高兴能弄清楚这一点。
select calendar.datefield, (ifnull(tOHS.Count,0)+ifnull(tOMSS.Count,0)+ifnull(tOMSN.Count,0)) as 'Total', ifnull(tOHS.Count,0) as 'OHS', ifnull(tOMSS.Count,0) as 'OMS-S', ifnull(tOMSN.Count,0) as 'OMS-N'
from calendar
LEFT OUTER JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as 'Date'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where School = 'OHS'
Group By calendar.datefield,workorders.school
) tOHS
on calendar.datefield = tOHS.Date
LEFT OUTER JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as 'Date'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where School = 'OMS-S'
Group By calendar.datefield,workorders.school
) tOMSS
on calendar.datefield = tOMSS.Date
LEFT OUTER JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as 'Date'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where School = 'OMS-N'
Group By calendar.datefield,workorders.school
) tOMSN
on calendar.datefield = tOMSN.Date
WHERE calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
这将返回范围 a 到 b 的日期,并给出 3 座建筑物和每座建筑物的总计。我有 4 栋建筑物,但通过将每个 LEFT OUTER JOIN 复制并粘贴到 on 子句并更改变量,然后为该计数添加新的选择,可以轻松添加任意数量的建筑物。
哇,这东西可能会让人困惑。希望有一天它能帮助别人:-)
比尔
关于mysql - 如何从基于 where 子句和子查询的数据列表中派生标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581361/
我试图从一些 sql 查询中获得一些额外的性能,这些查询在一个字段上有一个 where 子句,它是一个非唯一的非聚集索引,它也是表 A 中的一个外键。该外键是主键在表 B 上,是聚集索引。 我想知道的
当包含在 FOR 中时,应该如何编写此 WMIC 命令脚本中的命令? wmic service where (name="themes" and state="running") get 下面的代码不
请帮我理解如何订购 对over子句的影响。我已经阅读了 msdn 和一本书,但仍然误解了。 假设我们有这样的查询: SELECT Count(OrderID) over(Partition By Ye
参见如下SQL语句: SELECT datediff("d", MAX(invoice.date), Now) As Date_Diff , MAX(invoice.date) AS ma
不知何故,对我来说构建这样的查询有点困难:给我所有链接名称不为空的导航条目 $query = $this->db->get_where('navigation',array('linkname'!==
我一直在寻找这个,但没有发现任何特别的东西。 是否可以有一个像 ALL IN 一样的 SQL 查询?为了更好地解释,这是一个表结构。 Orders table OrderItem table (hav
SELECT DISTINCT Campaign_id FROM Impressions WHERE Date BETWEEN '2015-03-01' AND '2015-03-31' ; 上述查询
我尝试在 MyBatis 中遵循 if 子句并得到以下异常请帮助我确定这里的问题.. public class Student{ private Integer studId; private Str
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我尝试在 MyBatis 中遵循 if 子句并得到以下异常请帮助我确定这里的问题.. public class Student{ private Integer studId; private Str
是否可以用 where in 子句做这样的事情,我需要使用 where in 查询以下数据。 select * FROM instructor AS i INNER JOIN teaches AS t
嗨,我怎样才能让这个查询工作。我想要一个关于 where 子句的条件,如果 @BACHNUMB = '',那么 WHERE 是 (h.sopnumbe = @SOPNUMBE) 否则 WHERE 是
我在 MVC3 项目中工作。我浏览了一段时间并尝试了几个示例,但无法正常工作。 我需要从 OrderForm 表中获取记录列表,其 DeptID 在我已经获得的另一个列表中。 我知道我需要使用 Con
select * from staff LEFT JOIN servicereservation on servicereservation.snic = staff.snic where servi
我正在尝试使用 MySQL 创建带有“WITH”子句的 View WITH authorRating(aname, rating) AS SELECT aname, AVG(quantity)
我正在尝试使用 MySQL 创建触发器,但遇到错误。限制是:用户不得对他或她同时销售的商品出价。 Create Trigger before_insert_bid Before Insert on B
我正在尝试在 PostgreSql 的 WHERE IN 子句中使用 split_part,如下所示。这里 Objcode 是 small int 类型,objection 可能像 1374,824,
这可能很简单,只是我太厚了 - 我试图阻止保留的元素在记录中被拾取,但只有当库存大于 0 时,我不知道该怎么做除非 "....WHERE blah blah AND (reserved = 0 OR
我总结了两个表中两列的行,即如下所示: SUM( tableA.age ) + sum( tableB.age) as 'Total Ages' 但在某些情况下,A表的结果为空,而B表的结果则不是。在
我写了一个查询,从出生日期字段开始计算出一个人的年龄,然后使用 AS age 创建一个年龄字段。 我的问题是,是否可以再次匹配那个年龄字段? 像这样, SELECT `candidates`.`can
我是一名优秀的程序员,十分优秀!