Mysql 如何在这个原始SQL调用中联合并找到中间时间?
我正在努力Mysql 如何在这个原始SQL调用中联合并找到中间时间?,mysql,sql,ruby-on-rails,union,Mysql,Sql,Ruby On Rails,Union,我正在努力 从同一型号的事件中收集两个不同的类型对象(已发布和在查看中) 查找已发布和已创建之间的中间时间 按日期分组 这样我就可以返回一个数组,其中包含一个日期,以及在reviewing和Published中共享一个目标id的任何类型之间的中间时差。我想SQL会返回秒吗 例如: [[Mon, 03 Dec 2012, 110000], [Thu, 13 Dec 2012, 2200000]] 我的原始SQL语法缺少一些结论。到目前为止,我的结论如下: SELECT target_id
事件
中收集两个不同的类型
对象(已发布
和在查看
中)已发布
和已创建
之间的中间时间Published
中共享一个目标id
的任何类型之间的中间时差。我想SQL会返回秒吗
例如:
[[Mon, 03 Dec 2012, 110000], [Thu, 13 Dec 2012, 2200000]]
我的原始SQL语法缺少一些结论。到目前为止,我的结论如下:
SELECT target_id, DATE(created_at), COUNT(*)
FROM ( SELECT target_id, DATE(created_at)
FROM events
WHERE created_at > '#{@start_time}'
AND events.type = 'InReviewing'
UNION ALL
SELECT target_id, DATE(created_at)
FROM events
WHERE created_at > '#{@start_time}'
AND events.type = 'Published'
) tmp
GROUP BY DATE(created_at)
不要介意{@start\u time
},它在这里使用本机代码来实现时间,并且工作正常
谢谢!我想我不明白你的问题,但我还是决定试一试(另外,因为我现在没有访问MySql的权限,这个例子来自MS SQL): 这将为您提供每个目标何时被查看和发布的时间戳以及它们之间的秒数。我对您想要什么有点困惑。。。 以下是我“认为”你想要的:
SELECT DATEPART(DAYOFYEAR, x.created_at), AVG(DATEDIFF(SECOND, x.created_at, y.created_at))
FROM
(SELECT *
FROM Events a
WHERE a.created_at > '#{@start_time}'
AND a.type = 'InReviewing') x INNER JOIN
(SELECT *
FROM Events a
WHERE a.created_at > '#{@start_time}'
AND a.type = 'Published') y ON x.target_id = y.target_id
GROUP BY DATEPART(DAYOFYEAR, x.created_at)
ORDER BY DATEPART(DAYOFYEAR, x.created_at)
免责声明:由于我没有您的表架构,我的测试不完全有效。如果您要共享示例设置和所需的输出,那么我可以提供更好的查询
希望这有帮助。difference=unix\u时间戳(theone)-unix\u时间戳(theother)令人尴尬的是,我对实现这个建议还不够熟悉。不过这很有帮助,谢谢。我对SQL或MS SQL都不太了解,这有点棘手。但是我看到你实例化了
x
和y
。这些是MS SQL中隐含的吗?还是我在其他地方遗漏了这些变量的某种实例化?啊,很好,我完全是f我根据您的回答进行了分析!谢谢Nabheet!不客气。这是一次冒险,很高兴它有所帮助。我认为x和y是子查询的别名。两个查询之间的区别在于如何处理输出。在第一个查询中,输出只是一个目标id列表,ReviewingCreated和Publishedcreated以及order by。第二个查询一个人需要做一点额外的工作,它计算一年中每一天的平均时差,以秒为单位。
SELECT DATEPART(DAYOFYEAR, x.created_at), AVG(DATEDIFF(SECOND, x.created_at, y.created_at))
FROM
(SELECT *
FROM Events a
WHERE a.created_at > '#{@start_time}'
AND a.type = 'InReviewing') x INNER JOIN
(SELECT *
FROM Events a
WHERE a.created_at > '#{@start_time}'
AND a.type = 'Published') y ON x.target_id = y.target_id
GROUP BY DATEPART(DAYOFYEAR, x.created_at)
ORDER BY DATEPART(DAYOFYEAR, x.created_at)