我正在尝试创建更新查询,并在获得正确的语法方面几乎没有进展.以下查询正在运行:
SELECT t.Index1, t.Index2, COUNT( m.EventType )
FROM Table t
LEFT JOIN MEvents m ON
(m.Index1 = t.Index1 AND
m.Index2 = t.Index2 AND
(m.EventType = 'A' OR m.EventType = 'B')
)
WHERE (t.SpecialEventCount IS NULL)
GROUP BY t.Index1, t.Index2
Run Code Online (Sandbox Code Playgroud)
它创建一个三元组列表Index1,Index2,EventCounts.它仅在t.SpecialEventCount为NULL的情况下执行此操作.我试图写的更新查询应该将此SpecialEventCount设置为该计数,即上面查询中的COUNT(m.EventType).此数字可以是0或任何正数(因此左连接).Index1和Index2在表t中是唯一的,它们用于标识MEvent中的事件.
如何修改选择查询以成为更新查询?就是这样的
UPDATE Table SET SpecialEventCount=COUNT(m.EventType).....
Run Code Online (Sandbox Code Playgroud)
但我很困惑什么放在哪里,并失败了许多不同的猜测.
从Windows Vista(在VBA内,但可能不相关)我打开网页
Shell ("C:\Users\" & Environ$("Username") & "\AppData\Local\Google\Chrome\Application\Chrome.exe -url " & URL)
Run Code Online (Sandbox Code Playgroud)
我想在特定的窗口中打开这些页面.我遇到过--new-window开关,但这总是会创建一个新窗口.我想要一个总是进入预定义窗口的选项,只有当它不存在时才打开它的窗口.
例如
...Chrome.exe -window mywindowA -url URL1
...Chrome.exe -window mywindowB -url URL2
...Chrome.exe -window mywindowA -url URL3
Run Code Online (Sandbox Code Playgroud)
不应该影响任何其他打开的窗口,而是打开2个新窗口,一个包含URL1和URL3,另一个包含URL2.
安装所有最新的Windows更新后,我的Excel VBA代码在第一个模块的最开始显示自动化错误.它包含一些表单以及VBA代码的众多模块.但是,删除表单(和相关代码)时一切都很好.
大约一年前,在其他一些Windows更新之后发生了同样的事情.然后删除.exd文件就可以了,但当前的更新(包括Service Pack 3)似乎有所不同.
发生了什么,我怎样才能让表格运作起来?所有代码都保持不变,并且在以前的所有Windows/Office更新中都存活了下来.运行Windows 7(在Vista计算机上也是如此)和Office 2007.
我有大型 CSV 文件(每个 50-500 MB)。在这些上运行复杂的 power shell 命令需要永远和/或遇到内存问题。
处理数据需要按公共字段分组,比如在 ColumnA 中。因此,假设数据已经按该列排序,如果我随机拆分这些文件(即每个 x 千行),那么匹配的条目仍可能以不同的部分结束。A 中有数千个不同的组,因此将每个组拆分为一个文件会创建多个文件。
如何将其拆分为 10,000 行的文件而不丢失组?例如,第 1-13 行将是 A 列中的 A1,第 14-17 行将是 A2 等,第 9997-10012 行将是 A784。在这种情况下,我希望第一个文件包含第 1-10012 行,下一个以第 10013 行开头。
显然我想保留整行(而不仅仅是 A 列),所以如果我将所有结果文件粘贴在一起,这将与原始文件相同。
在我的 Java 代码中,我通过 JDBC 连接与 MySQL 数据库交互。我设置了一个连接和一些语句(用于重用)
connect = DriverManager.getConnection(connectionstring);
statement = connect.createStatement();
statement2 = connect.createStatement();
Run Code Online (Sandbox Code Playgroud)
对于大部分代码, statement.executeQuery(query) 很好,但有些操作是“块”,所以我需要确保它们要么一起通过,要么都不做。我相信以下代码可以实现这一点。
connect.setAutoCommit(false);
statement.addBatch(insertquery1);
statement.addBatch(insertquery2);
statement.addBatch(insertquery3);
statement.addBatch(insertquery4);
statement.executeBatch();
connect.commit();
connect.setAutoCommit(true);
Run Code Online (Sandbox Code Playgroud)
据我所知,connect 调用会影响整个连接,因此会影响 statement 和 statement2。此外,我似乎可以在创建语句对象后设置 AutoCommit 值,并且它仍然适用于它。这样对吗?将它们拆分并保留不同的连接对象是否会更好的做法/更有效地仅用于如下所示的自动提交调用?
// objects purely for batch operations
connect = DriverManager.getConnection(connectionstring);
connect.setAutoCommit(false);
statement = connect.createStatement();
// objects for normal operations
connect2 = DriverManager.getConnection(connectionstring);
connect2.setAutoCommit(true);
statement2 = connect2.createStatement();
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,它们只占调用的不到 1%,但该百分比确实需要分批完成。什么是最佳实践?
我最初定义了一份准备好的声明
prepstmt=conn.prepareStatement("...");
Run Code Online (Sandbox Code Playgroud)
然后在代码的各个部分使用它(通过函数)
prepstmt.setDouble(1,x);
prepstmt.execute();
Run Code Online (Sandbox Code Playgroud)
现在我有时会得到"声明关闭后不允许任何操作." 这是由于代码中其他地方的基础连接被关闭/超时/重置引起的.
现在显然我可以尝试/捕获错误并重置prepstmt然后,但这会使"重新运行"查询更加尴尬,所以想知道首先用类似的东西检查是多么"昂贵"
if (prepstmt.isClosed())
prepstmt=conn.prepareStatement("...");
prepstmt.setDouble(1,x);
prepstmt.execute();
Run Code Online (Sandbox Code Playgroud)
即在每次使用之前检查准备好的声明是否已关闭.猜测这一点必然会对性能产生一些影响,但不知道有多重要.估计对于我的特定应用程序,其关闭时间不到0.1%.