sql 求解释 !求解释!

u010086518 2015-01-05 05:02:24
select
e.unit_id,
e.unit_name,
f.temp_id,
f.temp_name,
f.temp_type,
g.pro_id,
g.pro_cn_name + '(' + g.pro_en_name + ')' pro_name,
h.admin_id, h.name,
d.lost,
convert(varchar(10), d.min_data_time, 20) min_data_time
from
(
select a.unit_id, a.min_data_time, COUNT(*) lost
from
(
select unit_id, DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, MIN(data_time))), 0) min_data_time
from lz_product_unit_value
group by unit_id
) a cross join
(
select distinct DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, day_time)), 0) day_time
from lz_workday
where work = '1' --1 表示周一到周五的工作日
) b
left join lz_product_unit_value c
on a.unit_id = c.unit_id and b.day_time = DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, c.data_time)), 0)
where b.day_time >= a.min_data_time
and b.day_time <= DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, GETDATE())), 0)
and c.unit_id is null
group by a.unit_id, a.min_data_time
) d
join lz_product_unit e on d.unit_id = e.unit_id
join lz_product_template f on e.temp_id = f.temp_id
join lz_product g on f.pro_id = g.pro_id
join lz_admin h on e.admin_id = h.admin_id
where f.temp_type = '1' -- 1表示按照‘周’频率计算
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu13241 2015-01-08
  • 打赏
  • 举报
回复
引用 3 楼 u010086518 的回复:
[quote=引用 1 楼 liu13241 的回复:] 你的问题呢…
这段sql 没懂 [/quote] count(*) lost count(*)是查个数, lost是起的名字(我就不吐槽这个名字了) DATEADD(day, -1, MIN(data_time)) MIN函数就不解释了,DATEADD在这里就是在这个时间基础上-1天,返回值类型不变 外层嵌套的 DATEDIFF(wk, 0, DATEADD(day, -1, MIN(data_time))是求刚才的那个日期距离1900-01-01相差的周 DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, MIN(data_time))), 0)这个是在1900-01-01基础上加这么多周,得到的就是该周的周一(好机智,不分析我都没看懂要干嘛) 后面那个同理,我就不解释了,附上DATEDIFF和DATEADD函数 以下内容转子w3c 假设我们有下面这个 "Orders" 表: OrderId ProductName OrderDate 1 'Computer' 2008-12-29 16:25:46.635 现在,我们希望向 "OrderDate" 添加 2 天,这样就可以找到付款日期。 我们使用如下 SELECT 语句: SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate FROM Orders SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate 结果: DiffDate 1
csdn_aspnet 2015-01-06
  • 打赏
  • 举报
回复
COUNT(*) lost 明显是统计 DATEADD 日期计算 是用周(wk)的时间间隔来计算哪一天是本周的星期一 Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) http://www.cnblogs.com/liuhaitao/archive/2009/03/12/1409793.html
u010086518 2015-01-06
  • 打赏
  • 举报
回复
引用 1 楼 liu13241 的回复:
你的问题呢…
这段sql 没懂 from ( select a.unit_id, a.min_data_time, COUNT(*) lost from ( select unit_id, DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, MIN(data_time))), 0) min_data_time from lz_product_unit_value group by unit_id ) a cross join ( select distinct DATEADD(wk, DATEDIFF(wk, 0, DATEADD(day, -1, day_time)), 0) day_time from lz_workday where work = '1' --1 表示周一到周五的工作日 ) b
u010086518 2015-01-06
  • 打赏
  • 举报
回复
引用 1 楼 liu13241 的回复:
你的问题呢…

这段sql 没懂
kuangerren 2015-01-05
  • 打赏
  • 举报
回复
这是一个十分 复杂的复合查询语句啊。
liu13241 2015-01-05
  • 打赏
  • 举报
回复
你的问题呢…

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧