【问题标题】:SQL - Getting more data with a GROUP BYSQL - 使用 GROUP BY 获取更多数据
【发布时间】:2010-10-19 09:26:16
【问题描述】:

希望有人能帮我解决这个问题。

假设我有一个名为 incoming_data 的表,它有 4 列:

primary_key_id
serial_number
counter
selected_color

我从填写此表的来源获取数据。主键有它的标识 打开所以它不会重复。我会得到不同颜色的重复序列号。

来自设备的计数器不断增加。

所以我要做的是选择我今天收到的所有数据,将数据按序列号分组,然后只获取记录 具有最高的计数器值。

简单:

SELECT      serial_number, MAX(counter)
FROM        incoming_data 
GROUP BY    serial number

这很好用,除了我想对颜色信息做点什么 我收到的。

如果我为选择添加颜色,那么我会得到所有记录,因为所有 我那天收到的颜色不一样。那是行不通的。

如果我能得到记录的 primary_key_id 那么我就可以 查询颜色,但这也不起作用,因为每个 primary_key_id 价值不同,我都得到了。

有什么更好的技术建议吗?

谢谢!

【问题讨论】:

    标签: sql


    【解决方案1】:

    提取相关的密钥,然后加入回来得到“非密钥”。 这适用于 MS SQL Server 和更高版本的 Sybase。

    SELECT 
        i.serial_number, i.counter, i.selected_color
    FROM
       (
       SELECT      serial_number, MAX(counter) AS maxc
       FROM            incoming_data 
       GROUP BY    serial number
       ) max
       JOIN
       incoming_data i ON max.serial_number = i.serial_number AND max.maxc = i.counter
    

    【讨论】:

      【解决方案2】:

      编辑:处理多个记录具有相同序列号和最大计数器值的情况。这将提取具有最大 primary_key_id 的多个记录之一

         Select * From incoming_data 
          Where primary_key_id In 
             (Select Max(primary_key_id) From incoming_data I
              Where Counter = 
                    (Select Max(counter) From incoming_data 
                     Where SerialNumber = I.SerialNumber)
              Group By SerialNumber)
      

      【讨论】:

      • 如果有一个重复的计数器,假设两个设备的计数器在同一天是 500,由于我们正在匹配计数器,这会导致问题吗?来自多个不同设备的计数器很可能是相同的。
      【解决方案3】:

      您好,我认为这可能会满足您的需求?

      SELECT selected_color, serial_number, counter FROM incoming_data GROUP BY serial_number ORDER BY counter DESC LIMIT 1;

      【讨论】:

        【解决方案4】:

        如果您不需要查询中的确切颜色,但可以在之后对其进行解析,请尝试以下操作:

        SELECT      serial_number, MAX(counter), MAX( CONCAT(counter, ':', selected_color) )
        FROM            incoming_data 
        GROUP BY    serial number
        

        【讨论】:

          【解决方案5】:

          我正在尝试从两个连接的表中获取最大数量。我尝试使用 DISTINCT 来避免重复数字,但失败了。然后我发现了以下查询并且在单个表上完美运行,但我无法让它在连接两个表上运行。

          如何在我的查询中实现以下查询: 选择前 10 名消费KWH 来自定期消费 按消耗量KWH分组 按 min(ConsumptionKWH) asc 排序

          需要:

          " 选择 * 从 " & _ " (SELECT Distinct top 10 " & _ " PeriodicConsumptions.ConsumptionKWH, " & _ " MeterReadings.MeterNo," & _ " MeterReadings.LastKWH," & _ " MeterReadings.AccountNo," & _ " MeterReadings.MultiplyFactor," & _ " MeterReadings.LastReading," & _ " MeterReadings.ThisMonthReading," & _ " MeterReadings.NumberofDays," & _ " MeterReadings.ReadingGYear, " & _ " MeterReadings.ReadingGMonth," & _ " MeterReadings.ReadingDate " & _ “来自 MeterReadings, PeriodicConsumptions” & _ " 其中 MeterReadings.AccountNo = PeriodicConsumptions.AccountNo " & _ " 和 MeterReadings.ReadingGYear =PeriodicConsumptions.ConsumptionYear " & _ " 和 MeterReadings.ReadingGMonth =PeriodicConsumptions.ConsumptionMonth " & _ " 和 MeterReadings.ReadingDate = PeriodicConsumptions.FromDate " & _ " ORDER BY PeriodicConsumptions.ConsumptionKWH desc) as t " & _ " ORDER BY ConsumptionKWH asc"

          谢谢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-21
            相关资源
            最近更新 更多