首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组查询困难

分组查询困难
EN

Stack Overflow用户
提问于 2013-01-10 23:57:11
回答 3查看 66关注 0票数 1

我在编写查询以获得我想要的结果时遇到了问题。我有下表:

代码语言:javascript
复制
CREATE TABLE [dbo].[inputs](
    [iid] [int] IDENTITY(1,1) NOT NULL,
    [tag_id] [int] NULL,
    [date_time] [datetime] NULL,
    [input_raw] [float] NULL,
    [input_calibrated] [float] NULL,
    [input_type] [varchar](50) NULL,
    [virtual_record] [varchar](50) NULL,
    [status_change] [varchar](50) NULL,
    [prev_stat_chg] [varchar](50) NULL,
    [prev_status_change] [varchar](50) NULL,
    [unix_timestamp] [float] NULL,
 CONSTRAINT [PK_inputs] PRIMARY KEY CLUSTERED 
(
    [iid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,   ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]`
)

我正在编写一个查询,以便以一种可以与我拥有的时间线图表一起使用的格式获取数据。需要数据按“"unix_timestamp”“分组,具有"n”个tag_id的"input_raw“。

例如:

代码语言:javascript
复制
SELECT TOP 20 inputs.unix_timestamp, inputs.input_raw, inputs.tag_id 
FROM [200030].[dbo].inputs
WHERE inputs.tag_id = 92149 or inputs.tag_id = 92164
ORDER BY unix_timestamp DESC

给出了结果:

代码语言:javascript
复制
unix_timestamp  input_raw   tag_id
1357788990  313         92149
1357788990  210         92164
1357788690  313         92149
1357788690  210         92164
1357788390  313         92149
1357788390  210         92164
1357788090  313         92149
1357788090  210         92164
1357787790  313         92149
1357787790  210         92164
1357787490  313         92149
1357787490  210         92164
1357787190  313         92149
1357787190  210         92164
1357786890  313         92149
1357786890  210         92164
1357786590  313         92149
1357786590  210         92164
1357786290  313         92149
1357786290  210         92164

我需要一个像这样的结果:

代码语言:javascript
复制
unix_timestamp     tag(92149)     tag(92164)
1357788990         313            210
1357788690         313            210
|
|
Vetc...

如果时间戳上的其他标签有任何其他数据,则还需要字符串"undefined“或”NULL“,如果一个标签中有任何丢失的数据。

有什么帮助吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-11 00:00:32

这是数据的轴心。您没有指定正在使用的RDBMS,但您可以在所有数据库中使用以下内容:

代码语言:javascript
复制
SELECT unix_timestamp,
  max(case when inputs.tag_id = 92149 then input_raw else null end) tag_92149,
  max(case when inputs.tag_id = 92164 then input_raw else null end) tag_92164
FROM [200030].[dbo].inputs
GROUP BY unix_timestamp

请参阅SQL Fiddle with Demo

如果使用具有PIVOT函数(SQL Server/Oracle)的数据库,则可以使用:

代码语言:javascript
复制
select *
from
(
  select unix_timestamp,
    input_raw,
    tag_id 
  from [200030].[dbo].inputs
) src
pivot
(
  max(input_raw)
  for tag_id in ([92149], [92164])
) piv

请参阅SQL Fiddle with Demo

两者的结果都是:

代码语言:javascript
复制
| UNIX_TIMESTAMP | 92149 | 92164 |
----------------------------------
|     1357786290 |   313 |   210 |
|     1357786590 |   313 |   210 |
|     1357786890 |   313 |   210 |
|     1357787190 |   313 |   210 |
|     1357787490 |   313 |   210 |
|     1357787790 |   313 |   210 |
|     1357788090 |   313 |   210 |
|     1357788390 |   313 |   210 |
|     1357788690 |   313 |   210 |
|     1357788990 |   313 |   210 |
票数 1
EN

Stack Overflow用户

发布于 2013-01-10 23:59:59

代码语言:javascript
复制
SELECT  unix_timestamp,
        MAX(CASE WHEN tag = 92149 THEN input_raw ELSE NULL END) [tag92149],
        MAX(CASE WHEN tag = 92164 THEN input_raw ELSE NULL END) [tag92164]
FROM    tableName
GROUP BY unix_timestamp

代码语言:javascript
复制
SELECT unix_timestamp, [92149] As tag92149, [92164] as tag92164
FROM
    (
      SELECT    unix_timestamp, 
                tag,
                input_raw
      FROM      tableName
    ) a
    PIVOT
    (
      MAX(input_raw)
      for tag in ([92149], [92164])
    ) b
票数 1
EN

Stack Overflow用户

发布于 2013-01-11 00:00:26

这是一个旋转查询。您可以使用以下命令在任何数据库中执行此操作:

代码语言:javascript
复制
select unix_timestamp, 
       max(case when tag = 92149 then input_raw end) as tag_92349,
       max(case when tag = 92164 then input_raw end) as tag_92164
from (SELECT TOP 20 inputs.unix_timestamp, inputs.input_raw, inputs.tag_id 
     FROM [200030].[dbo].inputs
     WHERE inputs.tag_id = 92149 or inputs.tag_id = 92164
    ) t
group by unix_timestamp
ORDER BY unix_timestamp DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14261932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档