小编Con*_*rix的帖子

Postgres会将WHERE子句下推到带有Window函数(Aggregate)的VIEW吗?

Pg's Window函数的文档:

窗口函数考虑的行是由查询的FROM子句生成的"虚拟表",由WHERE,GROUP BY和HAVING子句过滤,如果有的话.例如,任何窗口函数都看不到因为它不符合WHERE条件而被删除的行.查询可以包含多个窗口函数,这些函数通过不同的OVER子句以不同的方式对数据进行分片,但它们都作用于此虚拟表定义的相同行集合.

但是,我没有看到这一点.在我看来,选择过滤器非常靠近左边距和顶部(最后完成的事情).

=# EXPLAIN SELECT * FROM chrome_nvd.view_options where fkey_style = 303451;
                                                      QUERY PLAN                                                      
----------------------------------------------------------------------------------------------------------------------
 Subquery Scan view_options  (cost=2098450.26..2142926.28 rows=14825 width=180)
   Filter: (view_options.fkey_style = 303451)
   ->  Sort  (cost=2098450.26..2105862.93 rows=2965068 width=189)
         Sort Key: o.sequence
         ->  WindowAgg  (cost=1446776.02..1506077.38 rows=2965068 width=189)
               ->  Sort  (cost=1446776.02..1454188.69 rows=2965068 width=189)
                     Sort Key: h.name, k.name
                     ->  WindowAgg  (cost=802514.45..854403.14 rows=2965068 width=189)
                           ->  Sort  (cost=802514.45..809927.12 rows=2965068 width=189)
                                 Sort Key: h.name
                                 ->  Hash Join  (cost=18.52..210141.57 rows=2965068 width=189)
                                       Hash Cond: (o.fkey_opt_header = h.id)
                                       -> …
Run Code Online (Sandbox Code Playgroud)

postgresql where-clause window-functions

10
推荐指数
1
解决办法
2259
查看次数

Parallel.ForEach问题

我在C#/ VS2010中使用Parallel.ForEach循环来进行处理,我有几个问题.

首先我有一个需要从远程web服务中提取信息,然后将需要建立的飞行图像(GDI)的过程.

我有一个类,它将所有功能封装到一个对象中,使用两个主要方法Load()和CreateImage(),并在此对象中包含所有GDI管理/ WebRequests"blackboxed".

然后我创建一个包含所有需要处理的对象的GenericList,并使用以下代码遍历列表:

try
        {
            Parallel.ForEach(MyLGenericList, ParallelOptions, (MyObject, loopState) =>
            {                                       

                    MyObject.DoLoad();
                    MyObject.CreateImage();
                    MyObject.Dispose();

                if (loopState.ShouldExitCurrentIteration || loopState.IsExceptional)
                    loopState.Stop();
            });
        }
        catch (OperationCanceledException ex)
        {
            // Cancel here
        }
        catch (Exception ex)
        {
            throw ex;
        }
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:

  1. 鉴于列表中可能有一万个项要解析,上面的代码是最好的方法吗?任何其他想法更受欢迎
  2. 我有一个问题,当我开始进程时,对象被创建/加载并且图像创建得非常快,但是在大约六百个对象之后,进程开始爬行.它最终没有完成,这是正常的吗?

在此先感谢:)亚当

.net c# multithreading task-parallel-library

9
推荐指数
1
解决办法
2746
查看次数

Mysql join和sum是加倍的结果

我有一张收入表

title_id     revenue    cost
   1            10        5
   2            10        5
   3            10        5
   4            10        5
   1            20        6                    
   2            20        6
   3            20        6
   4            20        6
Run Code Online (Sandbox Code Playgroud)

当我执行此查询

SELECT SUM(revenue),SUM(cost)
FROM revenue
GROUP BY revenue.title_id
Run Code Online (Sandbox Code Playgroud)

它会产生结果

title_id     revenue    cost
   1            30        11
   2            30        11
   3            30        11
   4            30        11
Run Code Online (Sandbox Code Playgroud)

这是好的,现在我想将sum结果与另一个具有这样结构的表结合起来

title_id     interest    
   1            10        
   2            10        
   3            10        
   4            10        
   1            20                            
   2            20        
   3            20        
   4            20        
Run Code Online (Sandbox Code Playgroud)

当我用这样的聚合函数执行连接时

SELECT SUM(revenue),SUM(cost),SUM(interest)
FROM revenue
LEFT JOIN fund ON …
Run Code Online (Sandbox Code Playgroud)

mysql sql join group-by aggregate-functions

7
推荐指数
1
解决办法
7566
查看次数

如何使用多个数据库模式管理Doctrine查询

我有一个实体A,其关系是ManyToOne与B,但A和B不属于同一个DB模式.

实体"A"属于MyBundle包,实体"B"属于MyOtherBundle包.

官方文档说明了如何使用不同的连接:多个模式=多个实体管理器.但就我而言,我想加入两个实体.

通过做 :

$this->objEm->getRepository('MyBundle:MyEntity')->find($id);
Run Code Online (Sandbox Code Playgroud)

要么

$this->objEm->getRepository('MyBundle:MyEntity')->getMyResult($id);
Run Code Online (Sandbox Code Playgroud)

我只调用我的一个存储库,我猜他无法得到另一个,因为在我的config.yml中我只能选择一个连接.

doctrine:
  dbal:
   connections:
     connection1:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema1_user%"
       password: "%database_schema1_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"
     connection2:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema2_user%"
       password: "%database_schema2_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"

orm:
  entity_managers:
    em1:
      connection:       connection1
      mappings:
              MyBundle: ~
              MyOtherBundle: ~
    em2:
      connection:       connection2
      mappings:
              MyOtherBundle: ~
Run Code Online (Sandbox Code Playgroud)

结果:糟糕,看起来出了问题.

1/1ReflectionException:类FQCN\Of\MyBundle\Entity\B不存在...

"我知道它不存在,我希望你现在看看好地方:比如在FQCN\Of\MyOtherBundle\Entity\B"

如何强制实体'B'的路径?

php doctrine-query symfony doctrine-orm

7
推荐指数
1
解决办法
2015
查看次数

仅在表B中没有值的情况下连接表

我正在尝试连接2个表并过滤不存在​​的值.

Table_Items:item_id,title等

Table_History:item_id,history_id,action,date

对于每个光盘,有许多可能的操作(购买,添加,播放,翻录等),每个操作在table_history中创建一个由item_id链接的新行.我正在寻找的查询将返回所有尚未翻录的光盘.我的查询返回太多行,返回所有内容,因为每个项目的历史记录表中至少有一个条目.

SELECT items.item_id, items.title AS Title, items.`author/creator`, history.action 
FROM items
LEFT JOIN history ON items.item_id = history.item_id
WHERE history.action NOT LIKE 'Ripped%' GROUP BY items.item_id ORDER BY title
Run Code Online (Sandbox Code Playgroud)

我正在使用mySQL.帮助将不胜感激!谢谢.

mysql sql

6
推荐指数
1
解决办法
5795
查看次数

在表格中查找缺少的时间间隔

我有下表,其中包含来自几个不同设备的每15分钟读取的值:

ID   DeviceID   Date                    Value
----------------------------------------------
1    3          24.08.2011 00:00:00     0.51
2    3          24.08.2011 00:15:00     2.9
3    3          24.08.2011 00:30:00     0
4    3          24.08.2011 00:45:00     7.1
5    3          24.08.2011 01:00:00     1.05
6    3          24.08.2011 03:15:00     3.8
Run Code Online (Sandbox Code Playgroud)

我想在给定月份的每个设备中查找表中的所有空白,其中没有条目.对于上表,结果应该是这样的:

DeviceID    StartDate               EndDate
-------------------------------------------------------
3           24.08.2011 01:00:00     24.08.2011 03:15:00
Run Code Online (Sandbox Code Playgroud)

该表有大约35000个设备和1亿个条目.

这就是我的尝试; 它很慢,但返回我需要的东西.然而,除了它的速度之外,还有另一个问题:它只发现在给定月份内设备的最后一个条目的丢失间隔; 之后的任何内容都将被忽略,因此可能会错过额外的缺失值间隔.

SELECT
    t2.Date AS StartDate
    , t1.Date AS EndDate
FROM
    TestTable t1
    INNER JOIN TestTable t2 ON t1.DeviceID = t2.DeviceID
WHERE
    (t2.Date = (SELECT MAX(Date) FROM TestTable t3 WHERE t3.Date < …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2008 gaps-and-islands

6
推荐指数
1
解决办法
2180
查看次数

在ExceptionMapper创建响应时,不会遍历RestEasy Post Process Interceptor链

我正在使用RestEasy构建我的Restful Web服务.我已经实现了ExceptionMappers来准备特定的异常响应.

我还实现了MessageBodyWriterInterceptors和一些PostProcessorInterceptors.

问题:当任何资源没有抛出任何异常时,一切正常.我的实现按预期工作.调用所有后处理器拦截器和消息体编写器拦截器.

但是,当从任何资源方法抛出异常时,将调用已注册的ExceptionMappers并创建响应.但在这种情况下,不会遍历后处理器拦截器链.他们没有被召唤.

在这种情况下我该怎么办 在我的异常映射器中写入该拦截器逻辑,或者是否有可用的解决方案?

java java-ee resteasy

6
推荐指数
1
解决办法
1315
查看次数

SQL select查询根据xml节点值获取记录?

我有一列ntext数据类型和非XML.它存储所有xml数据.我需要根据xml节点值获取记录.=>输入值是CpsiaId = 456并且应该返回在xml中具有此值的所有记录

我试过了 select * from tableName where convert(xml,column_name).value('data((/root/ProductInformation/CPSIA/CpsiaDetails/Item/CpsiaId)[1])','int') = 456

但它没有工作....任何想法或其他方式获取基于xml节点值的记录.

示例Xml:

<root>
  <ProductInformation>
    <Name> Truck with Battery Charger</Name>
    <Description>Fr.</Description>
    <CPSIA>
      <CpsiaDetails>
        <Item>
          <CpsiaId>456</CpsiaId>
          <CpsiaMessage>waring</CpsiaMessage>
        </Item>
        <Item>
          <CpsiaId>236</CpsiaId>
          <CpsiaMessage>to health</CpsiaMessage>
        </Item>
      </CpsiaDetails>
    </CPSIA>
  </ProductInformation>
</root>
Run Code Online (Sandbox Code Playgroud)

xml sql

5
推荐指数
1
解决办法
6795
查看次数

在T-SQL中为列添加预定义的默认值

我尝试测试一些东西,我得到的问题是我无法将默认值绑定到列.

我的目标是更改列并将预定义的默认值附加True到该列.

我究竟做错了什么?

CREATE default [dbo].[True] as (1)
GO

CREATE TABLE dbo.aaa ( column_a INT, column_b char(1)) ;
GO

INSERT INTO dbo.aaa (column_a)VALUES ( 7 ) ;
GO

ALTER TABLE dbo.aaa ADD CONSTRAINT DF_col_b DEFAULT [dbo].[True] FOR column_b ;
GO

INSERT INTO dbo.aaa (column_a) VALUES ( 10 ) ;
GO

SELECT * FROM dbo.aaa ;
GO

DROP TABLE dbo.aaa ;
GO
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我得到了ALTER TABLE行的错误

Msg 128,Level 15,State 1,Line 1

在此上下文中不允许使用名称"dbo.True".有效表达式是常量,常量表达式和(在某些上下文中)变量.不允许使用列名.

sql t-sql sql-server-2008

5
推荐指数
1
解决办法
1403
查看次数

根据条件更新查询

我想做以下几点.根据另一个字段的值更新字段

update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}
Run Code Online (Sandbox Code Playgroud)

我知道这不是有效的mysql,但它是我描述问题的最佳方式.

mysql sql conditional-statements

5
推荐指数
1
解决办法
3491
查看次数