很繁琐的查询,求助!主要涉及[最大值对应字段][多表联合查询][老规矩100分放上]

非专业开发Five 2012-08-25 05:43:05
先说说主表吧
主表类似这样的结构

编号(重复索引) 日期(重复索引) 时次(重复索引) 速度 方向 其他1 其他2


然后是附表1
编号(重复索引) 日期(重复索引) 时次(重复索引) 内容

然后是附表2
编号(重复索引) 日期(重复索引) 时次(重复索引) 内容

现在要求查询结果是这样的:

编号(唯一) 速度(一定日期时次结合内最大) 方向(对应最大速度的值) 附表内容(如果附表2有内容则用附表2内容,否则如果1有内容则1的内容否则空)其他1最大变化(max(其他1)=min(其他1))

问这个查询应该怎么写?

...全文
128 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
sid
max(ws)
max(ws)对应的wd
如果[Micapswdcode]有条件内容则取[vlaue],否则如[MicapsnWs]有对应内容则[values],否则为空
本段时间内max([Tp])-min([Tp])



这段是我要输出的表的字段
  • 打赏
  • 举报
回复
还有第一页说的重复索引的意思就是可以重复,但是添加索引。
  • 打赏
  • 举报
回复

USE [qxtcounttb]
GO
/****** 对象: Table [dbo].[MicapsDm] 脚本日期: 08/26/2012 19:06:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsDm](
[sid] [nvarchar](50) NOT NULL,
[yyyymmdd] [nvarchar](50) NOT NULL,
[times] [nvarchar](50) NOT NULL,
[Cc] [nvarchar](50) NULL,
[Wd] [nvarchar](50) NULL,
[Ws] [nvarchar](50) NULL,
[Pr] [nvarchar](50) NULL,
[Prc3] [nvarchar](50) NULL,
[Pwe] [nvarchar](50) NULL,
[Rr] [nvarchar](50) NULL,
[Cls] [nvarchar](50) NULL,
[Clc] [nvarchar](50) NULL,
[Clh] [nvarchar](50) NULL,
[Dev] [nvarchar](50) NULL,
[Vis] [nvarchar](50) NULL,
[We] [nvarchar](50) NULL,
[Tp] [nvarchar](50) NULL,
[Cms] [nvarchar](50) NULL,
[Chs] [nvarchar](50) NULL,
[Prc24] [nvarchar](50) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[MicapsMax] 脚本日期: 08/26/2012 19:06:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsMax](
[yyyymmdd] [nvarchar](50) NULL,
[times] [nvarchar](50) NULL,
[sid] [nvarchar](50) NULL,
[value] [nvarchar](50) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[MicapsMin] 脚本日期: 08/26/2012 19:06:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsMin](
[yyyymmdd] [nvarchar](50) NULL,
[times] [nvarchar](50) NULL,
[sid] [nvarchar](50) NULL,
[value] [nvarchar](50) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[MicapsWs] 脚本日期: 08/26/2012 19:06:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsWs](
[yyyymmdd] [nvarchar](50) NULL,
[times] [nvarchar](50) NULL,
[sid] [nvarchar](50) NULL,
[wsCode] [nvarchar](250) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[MicapsnWs] 脚本日期: 08/26/2012 19:06:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsnWs](
[yyyymmdd] [nvarchar](50) NULL,
[times] [nvarchar](50) NULL,
[sid] [nvarchar](50) NULL,
[wsCode] [nvarchar](250) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[Micapswdcode] 脚本日期: 08/26/2012 19:06:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Micapswdcode](
[wid] [nvarchar](50) NULL,
[wico] [nvarchar](50) NULL,
[wtext] [nvarchar](255) NULL
) ON [PRIMARY]
GO
/****** 对象: Table [dbo].[MicapsR24] 脚本日期: 08/26/2012 19:06:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MicapsR24](
[yyyymmdd] [nvarchar](50) NULL,
[times] [nvarchar](50) NULL,
[sid] [nvarchar](50) NULL,
[value] [nvarchar](50) NULL
) ON [PRIMARY]
GO

所有表索引都是 yyyymmdd (DESC), times (ASC), sid (ASC)

yyyymmdd存储内容是日期的nvarchar,格式是yyyyMMdd(20120826),times存储的是每天的对应小时。sid是每天每小时只出现一次的编号。

主要查询表为
[MicapsDm]
查询条件为 yyyymmdd='20120825' and times is in('00','01','02',03')

sid
max(ws)
max(ws)对应的wd
如果[Micapswdcode]有条件内容则取[vlaue],否则如[MicapsnWs]有对应内容则[values],否则为空
本段时间内max([Tp])-min([Tp])



不知道这样能看懂不?问题确实比较繁琐。
以学习为目的 2012-08-26
  • 打赏
  • 举报
回复
楼主你发的SQL语句了?
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

楼主,你能不能用正常的语言文字来描述你的问题?
或者索性用peseudo code,你现在的描述看的雷死人,还不容易明白啊.
[/Quote]

我稍把实际sql建表语句发上来


[Quote=引用 1 楼 的回复:]

先解释一下“重复索引”是啥意思?顺便说明一下怎么个猥琐法拉?
[/Quote]
繁琐啊。。。哪里猥琐了
shoppo0505 2012-08-26
  • 打赏
  • 举报
回复
楼主,你能不能用正常的语言文字来描述你的问题?
或者索性用peseudo code,你现在的描述看的雷死人,还不容易明白啊.
發糞塗牆 2012-08-25
  • 打赏
  • 举报
回复
先解释一下“重复索引”是啥意思?顺便说明一下怎么个猥琐法拉?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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