当前位置: 首页 > 知识库问答 >
问题:

如何查询msyql对不同表的行进行计数

邹高峻
2023-03-14

对不起,朋友们,我想问一下。我有4个db表。

桌位

表type_member

表事务处理

表history_member

如上所示的表格内容示例。如果表格的内容像上面的照片。如何找出总交易类型_Member“银”是怎样的?因为,例如,如果我使用查询select*from loket join transaction on loket.id=transaction.loket_id where loket.type_member_id=2将loket表与事务连接起来,那么结果必须为空,因为在transaction表中假定没有事务来自成员类型为silver的loket。即使你看看历史,它应该是在2021-04-30。

因为在2021-04-30 loket rahmat,成员的类型仍然是银。但在2021-05-01年,loket rahmat从银变成了金。请求帮助的朋友,如何正确的查询,这样的结果,我知道哪些是来自银会员类型的交易,哪些是来自黄金。事先谢谢你

共有1个答案

郎鹤龄
2023-03-14

这个查询应该会给出您想要的结果。它通过将transactionsleft join连接到history_member表来计算每个事务的适当type_member_id,只选择事务之前(或当天)的最新更改。如果成员类型没有更改,则使用原始值(来自loket):

SELECT COALESCE(h.to_member, l.type_member_id) AS member_type, SUM(price) AS transactions
FROM loket l
JOIN transaction t ON t.loket_id = l.id
LEFT JOIN history_member h ON h.loket_id = l.id AND h.create <= t.create
WHERE NOT EXISTS (SELECT * FROM history_member h2 WHERE h2.loket_id = l.id AND h2.create <= t.create AND h2.create > h.create)
GROUP BY member_type
HAVING member_type = 2

输出(用于示例数据):

member_type     transactions
2               1000

dbfiddle演示

 类似资料:
  • 问题内容: SQL2008。 我有一个测试表: 我用10k测试行填充它。 我运行以下两个查询: 我不知道为什么这两个查询有不同的执行计划。 查询1确实针对UQ_Sale_RowVersion索引进行索引搜索。 查询2对PK_Sale进行索引扫描。 我想查询2做索引查找。 我将不胜感激。 谢谢你。 [编辑] 尝试使用datetime2而不是rowversion。同样的问题。 我也尝试强制使用索引(查

  • 我对SQL不是很友好,所以我需要在一个表上编写一个SQL UPDATE/DELETE查询。要求如下。 表A: 1        Code1    价值1      8 2             代码2       价值2             2 4                代码3         价值3            8

  • 问题内容: 有一个表,如: 有没有一种方法可以计算相同月份/不同年份的值之间的差,因此得到的结果为: 我试图做类似的事情: 但输出为选择a(2012)的12个月*选择b(2011)的12个月。 编辑:抱歉,缺少重要信息: 通过odbc:jdbc桥对Excel工作表进行查询。 因为“ from”子句始终是这样的:[sheet1 $]我无法创建任何联接或case :( 问题答案: 您的查询无效,因为您

  • 我为每个日期创建了多个表来存储每个日期的一些信息。例如历史3108、历史0109..所有这些表共享相同的模式。有时候,我需要查询多个表,获取记录的行数和计数。在oracle和SQL Server中,最快的方法是什么? 目前我正在这样做。。。 当我需要多个表的计数时:为每个表选择计数(*),然后添加 当我需要多个表的记录时:从表1中选择*,从表2中选择*(基本上为每个表选择*) 如果我们在一个事务中

  • 问题内容: 我有一个接受查询,通过SQL服务器运行它,检查错误并返回结果的类。如何对该课程进行单元测试? 编辑 :我将尝试更精确: 负责将查询传递到服务器。为了测试它是否确实这样做,抛出正确的异常等,我想将其连接到将要填充的模拟数据库。我的问题是- 怎么做?如何创建一个模拟“服务器”来处理呼叫? 问题答案: 只需传递一个SQL查询,然后将返回的结果与预期的结果进行比较即可。简单的。JUnit是一个

  • 我应该用什么来替换'code TO VERIFY IF QUERY RESULT ROW IS=1'? 我用num_rows尝试了很多种方法,但都行不通。 我的PHP代码: