GVKun编程网logo

SQL Server:只有GROUP BY中的最后一个条目(sql有且只有一个)

18

对于想了解SQLServer:只有GROUPBY中的最后一个条目的读者,本文将提供新的信息,我们将详细介绍sql有且只有一个,并且为您提供关于groupby在sqlserver与oracle中的差别、

对于想了解SQL Server:只有GROUP BY中的最后一个条目的读者,本文将提供新的信息,我们将详细介绍sql有且只有一个,并且为您提供关于group by 在sqlserver与oracle中的差别、GROUP BY中的SQL ORDER BY总计、php – 将列中的最后一个条目选为其他列中的唯一条目、python – groupby在熊猫中的最后一个性能问题的有价值信息。

本文目录一览:

SQL Server:只有GROUP BY中的最后一个条目(sql有且只有一个)

SQL Server:只有GROUP BY中的最后一个条目(sql有且只有一个)

我在MSsql2005中有下表
id | business_key | result
1 | 1 | 0
2 | 1 | 1
3 | 2 | 1
4 | 3 | 1
5 | 4 | 1
6 | 4 | 0

现在我想根据business_key进行分组,返回id最高的完整条目.
所以我的预期结果是:

business_key | result
1 | 1
2 | 1
3 | 1
4 | 0

我打赌有一种方法可以实现这一点,我现在看不到它.

解决方法

另一种解决方案,可以为您提供更好的性能(测试两种​​方式并检查执行计划):
SELECT
     T1.id,T1.business_key,T1.result
FROM
     dbo.My_Table T1
LEFT OUTER JOIN dbo.My_Table T2 ON
     T2.business_key = T1.business_key AND
     T2.id > T1.id
WHERE
     T2.id IS NULL

此查询假定ID是唯一值(至少对于任何给定的business_key)并且它设置为NOT NULL.

group by 在sqlserver与oracle中的差别

group by 在sqlserver与oracle中的差别

sqlserver中group by 不能作为子句查询: 如:select * from (select deptno,count(*) counts from emp group by deptno) 上面在sqlserver中运行会报错,说明sqlserver中group by 不能作为子句 下面sql语句为查找人数最多的部门以及该部门号: select * fr

在sqlserver中group by 不能作为子句查询:

如:select * from (select deptno,count(*) counts from emp group by deptno)

上面在sqlserver中运行会报错,说明sqlserver中group by 不能作为子句



下面sql语句为查找人数最多的部门以及该部门号:

select * from (select deptno,count(*) counts from emp group by deptno) where counts =  (select max(count) from (select deptno,count(*) count from emp group by deptno));



人数最多的专业在sqlserver中查询:

 select classID,COUNT(*) from student group by classID having 
COUNT(*)=(select top 1 COUNT(*) as 人数 from student group by classID order by COUNT(*))
or
COUNT(*)=(select top 1 COUNT(*) as 人数 from student group by classID order by COUNT(*) desc) 


GROUP BY中的SQL ORDER BY总计

GROUP BY中的SQL ORDER BY总计

我听取了一些构建sql语句的帮助.目前我有以下内容:
SELECT a,b,count(1)
 FROM table
GROUP BY a,b
ORDER BY a asc,count(1) DESC

每行显示每个分组a中所有唯一B的总和,并按字母顺序按A排序,然后按B的最高出现次数排序到最低.我真正想要的是能够按A的每个分组中的总数进行排序(将每一行视为小计).

解决方法

SELECT  a,COUNT(*) AS bcnt,(
        SELECT  COUNT(*)
        FROM    mytable mi
        WHERE   mi.a = mo.a
        ) AS acnt
FROM    mytable mo
GROUP BY
        a,b
ORDER BY
        acnt DESC,bcnt DESC

php – 将列中的最后一个条目选为其他列中的唯一条目

php – 将列中的最后一个条目选为其他列中的唯一条目

试图从下表中获取最后一条唯一记录.有一些双打,那些应该被过滤掉.

id  topic   action  date
1   10127   2   2015-09-24 15:28:30
2   10127   4   2015-09-24 15:29:26
3   10127   2   2015-09-24 15:30:01
4   10127   3   2015-09-24 15:30:55
5   10127   1   2015-09-24 16:07:25
6   10127   5   2015-09-24 16:10:25
7   10127   4   2015-09-24 16:29:26

使用此查询(在此处找到)是我最好的努力,但只返回一个结果.

SELECT MAX(action) as action,topic,date FROM ...... 
GROUP by topic 
ORDER by action DESC

想要将此列表作为最新条目获取并在“主题”的“操作”上唯一:

id  topic   action  date
3   10127   1   2015-09-24 15:30:01
4   10127   2   2015-09-24 15:30:55
5   10127   3   2015-09-24 16:07:25
6   10127   4   2015-09-24 16:10:25
7   10127   5   2015-09-24 16:29:26

希望有人有解决方案!
谢谢!

解决方法:

您可以使用子查询来完成.这是完整的sqlfiddle:http://sqlfiddle.com/#!9/f7afa/23

Select * FROM (

SELECT
  disTINCT  `topic`, `action`, `date`
FROM
  ForgeRock      
ORDER by date DESC, action ASC

  ) as X
  GROUP BY action

python – groupby在熊猫中的最后一个性能问题

python – groupby在熊猫中的最后一个性能问题

我有一个包含两列和一十多万个元素的DataFrame.

In [43]: df.head(10)
Out[43]:
                    localtime                 ref
4  2014-04-02 12:00:00.273537  139058754703810577
5  2014-04-02 12:00:02.223501  139058754703810576
6  2014-04-02 12:00:03.518817  139058754703810576
7  2014-04-02 12:00:03.572082  139058754703810576
8  2014-04-02 12:00:03.572444  139058754703810576
9  2014-04-02 12:00:03.572571  139058754703810576
10 2014-04-02 12:00:03.573320  139058754703810576
11 2014-04-02 12:00:09.278517  139058754703810576
14 2014-04-02 12:00:20.942802  139058754703810577
15 2014-04-02 12:01:13.410607  139058754703810576

[10 rows x 2 columns]

In [44]: df.dtypes
Out[44]:
localtime    datetime64[ns]
ref                   int64
dtype: object

In [45]: len(df)
Out[45]: 111743

In [46]: g = df.groupby('ref')

如果我从我的组中请求最后一个元素,该函数就会挂起!

In [47]: %timeit g.last()

我在6分钟后杀了它; top在整个时间内显示100%的cpu.

如果我明确地请求localtime列,这至少会返回,尽管对于有多少元素来说它仍然看起来很荒谬.

In [48]: %timeit g['localtime'].last()
1 loops,best of 3: 4.6 s per loop

有什么我想念的吗?这是大熊猫0.13.1.

此问题与datetime64类型一起出现.假设我直接从文件中读取:

In [1]: import pandas as pd

In [2]: df = pd.read_csv('so.csv')

In [3]: df.dtypes
Out[3]:
localtime    object
ref           int64
dtype: object

In [4]: %timeit df.groupby('ref').last()
10 loops,best of 3: 28.1 ms per loop

对象类型工作得很好.然而,如果我施展时间戳,所有地狱都会破裂:

In [5]: df.localtime = pd.to_datetime(df.localtime)

In [6]: df.dtypes
Out[6]:
localtime    datetime64[ns]
ref                   int64
dtype: object

In [7]: %timeit df.groupby('ref').last()

情节变粗.

使用Jeff的建议在没有数据文件的情况下重现:

In [70]: rng = pd.date_range('20130101',periods=20,freq='s')

In [71]: df = pd.DataFrame(dict(timestamp = rng.take(np.random.randint(0,20,size=100000)),value = np.random.randint(0,100,size=100000)*1000000))

In [72]: %timeit df.groupby('value').last()
1 loops,best of 3: 332 ms per loop

但是,如果我改变随机整数的范围,那么问题又会出现!

In [73]: df = pd.DataFrame(dict(timestamp = rng.take(np.random.randint(0,100000,size=100000)*1000))

In [74]: %timeit df.groupby('value').last()                                                           

我只是增加了第二个randint()的高参数,这意味着groupby()将具有更大的长度.这会在没有数据文件的情况下重现我的错误.

请注意,如果我放弃datetime64类型,那么没有问题:

In [12]: df = pd.DataFrame(dict(timestamp = np.random.randint(0,size=100000),size=100000)*1000))

In [13]: %timeit df.groupby('value').last()
100 loops,best of 3: 14.4 ms per loop

所以罪魁祸首是在datetime64上缩放last().

最佳答案
必须是奇怪的事情……在0.13.1(和主人)看起来不错.发布您的文件的链接,我会看看.

In [3]: rng = date_range('20130101',freq='s')

In [4]: df = DataFrame(dict(timestamp = rng.take(np.random.randint(0,size=100000)*1000000))

In [5]: df.info()

好的,这里是解释:

使用np.random.randint(0,size = 100000)作为值,创建100个组,
而np.random.randint(0,size = 100000)创造了更多(在我的例子中)
63000)左右.

.last(in <0.14)implicity完成最后一个非nan值.这个na测试并不便宜,因此它具有较差的扩展性能(并且在每个组的python空间中完成). 另一方面,尾部(1)(<0.14)不检查这一点,因此性能要好得多(并使用cython路由来获得结果). 在0.14中这些将是相同的(即使你这样做:nth(-1,dropna =’any’)将复制最后在这里做的事情,这样做是为了有更好的性能.(谢谢@Andy Hayden). 底线是在<中使用tail(1). 0.14.

今天的关于SQL Server:只有GROUP BY中的最后一个条目sql有且只有一个的分享已经结束,谢谢您的关注,如果想了解更多关于group by 在sqlserver与oracle中的差别、GROUP BY中的SQL ORDER BY总计、php – 将列中的最后一个条目选为其他列中的唯一条目、python – groupby在熊猫中的最后一个性能问题的相关知识,请在本站进行查询。

本文标签: