【问题标题】:SQL query for SQL Server Compact Edition 3.5 - GROUP BY issueSQL Server Compact Edition 3.5 的 SQL 查询 - GROUP BY 问题
【发布时间】:2010-10-14 10:14:07
【问题描述】:
    SELECT BabyInformation.* , t1.* 
    FROM   BabyInformation 
    LEFT  JOIN
      (SELECT *  FROM  BabyData 
       GROUP BY BabyID 
       ORDER By Date DESC  ) AS t1 ON BabyInformation.BabyID=t1.BabyID

这是我的查询。我想根据日期获取最新的BabyData 元组。 BabyInformation 应与 babyData 左连接,但每个婴儿一行...

我尝试了TOP(1),但这仅适用于第一个婴儿

【问题讨论】:

    标签: sql-server-ce-3.5


    【解决方案1】:

    这是一种方法,还有其他方法可以更快,但我相信这对初学者来说是最清楚的。

     SELECT BabyInformation.*, BabyData.*
        FROM   BabyInformation 
        JOIN
          (SELECT BabyID, Max(Date) as maxDate  FROM  BabyData 
           GROUP BY BabyID 
          ) AS t1 
     ON BabyInformation.BabyID=t1.BabyID 
        Join BabyData ON BabyData.BabyID = t1.BabyID and BabyData.Date = t1.maxDate
    

    【讨论】:

    • +1 为清楚起见!这会起作用,但我认为如果同时在同一个 Baby 的 BabyData 表中插入两行或多行,则加入这样的日期可能会产生不可预测的结果。在这种情况下可能不是问题(毕竟这是问题所要求的) - 但值得一提。
    • SELECT BabyID, Max(Date) as maxDate,Length,Weight 不起作用.. babyinformation 也不包含日期
    • @Parhs,如果您不告诉我您的表格包含什么内容,那将无法帮助您。您的表格包含什么以及您想要什么信息。
    • @Parhs,已修复。但我没有测试——可能有错别字。
    • 只是一个小问题。如果日期相同则重复
    【解决方案2】:

    应该这样做:

    SELECT bi.* , bd.* 
        FROM BabyInformation [bi]
        LEFT JOIN BabyData [bd]
            on bd.BabyDataId = (select top 1 sub.BabyDataId from BabyData [sub] where sub.BabyId = bi.BabyId order by sub.Date desc)
    

    我假设 BabyData 表中有一个名为“BabyDataId”的列。

    【讨论】:

    • 解析查询时出错。错误选择中的令牌(最后一个)
    • 1) 您是在 SQL Management Studio 中执行此操作,还是从您的代码中执行此操作? 2) BabyData 表中是否有一个名为 BabyDataId 的字段? (我认为有 - 但你没有提到它..)
    • 抱歉 - 出现错误,我已更新。现在应该可以工作了。
    • 谢谢 :) 但我将日期设置为主键,没问题...我每天不需要超过 1 个。错误是什么?
    • 我在子查询中使用了不正确的表别名...它说 bd.BabyId 而不是 bi.BabyId - 这会教我不要校对 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多