在Mysql

时间:2018-03-26 18:20:36

标签: mysql sql

这是基于前一个Merge two tables without common column in sql的启发/基础。

如果条件更差,即我们在表B中没有该帖子的列endNumber怎么办?对于我的情况,我有表A,并且我没有表A的每个orgStatus的endTime。我们知道第二个orgStatus的startedTime实际上是第一个orgStatus的结束时间。

+-------+-----------+----------------------+
| orgId | orgStatus | startedTime          |
+-------+-----------+----------------------+
|   1   |    1      | 2011-12-14 09:25:21  |
|   1   |    2      | 2011-12-14 10:26:21  |
|   1   |    3      | 2011-12-14 11:27:21  |
|   1   |    4      | 2011-12-14 12:25:21  |
|   2   |    1      | 2011-12-14 10:26:21  |
|   2   |    2      | 2011-12-14 10:50:21  |
|   2   |    3      | 2011-12-14 11:28:21  |
|   2   |    4      | 2011-12-14 15:25:21  |
+-------+-----------+----------------------+

以上是表格A,表格B如下。

+-------+-----------+----------------------+
| orgId | eventid   | createdTime          |
+-------+-----------+----------------------+
|   1   |    id1    | 2011-12-14 09:26:21  |
|   1   |    id2    | 2011-12-14 10:27:21  |
|   2   |    id3    | 2011-12-14 10:27:22  |
|   2   |    id4    | 2011-12-14 10:51:21  |
|   1   |    id5    | 2011-12-14 11:28:21  |
|   2   |    id6    | 2011-12-14 11:29:21  |
|   1   |    id7    | 2011-12-14 12:26:21  |
|   2   |    id8    | 2011-12-14 15:26:21  |
+-------+-----------+----------------------+

期望的结果应该是

+-------+-----------+-----------+
| orgId | orgStatus | eventCount|
+-------+-----------+-----------+
|   1   |     1     |     1     |
|   1   |     2     |     1     |
|   1   |     3     |     1     |
|   1   |     4     |     1     |
|   2   |     1     |     1     |
|   2   |     2     |     1     |
|   2   |     3     |     1     |
|   2   |     4     |     1     |
+-------+-----------+-----------+

要将event分配给正确的orgIdorgStatus,我认为将这两个表加入相同的orgId,而另一个条件很复杂。事件的createdTime应该在相应startedTime的两个orgStatus之间。对于每个orgStatus的最后orgId,我们只检查event是否在createdTime的{​​{1}}之后创建。

我想为表orgStatus创建一个列endedTime,但是如何输入不在同一行的信息(我们需要的信息在下一行)。

所以我想到的第一步是修改表A,如下所示,

A

我被困在这里,我怎样才能获得不在同一行的信息。

1 个答案:

答案 0 :(得分:0)

感谢@Barmar的评论。 我自己会解决这个问题。

Fisrt,我使用新列<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RadioGroup android:id="@+id/radioGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:orientation="horizontal" > <RadioButton android:id="@+id/radioButton_plumber" android:layout_width="104dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginTop="8dp" android:onClick="onRadioButtonClicked" android:text="Plumber" /> <RadioButton android:id="@+id/radioButton_carpenter" android:layout_width="104dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:onClick="onRadioButtonClicked" android:text="Carpenter" /> <RadioButton android:id="@+id/radioButton_electrician" android:layout_width="104dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginTop="8dp" android:onClick="onRadioButtonClicked" android:text="Electrician" /> </RadioGroup> </android.support.constraint.ConstraintLayout> 修改表A。查询如下,

endedTime

上面的查询创建了最后一个表,然后我们可以在select a.orgId as orgId, a.orgStatus as orgStatus, a.startedTime as startedTime, ifnull(b.startedTime, '2030-01-01 00:00:00') as endedTime from A as a left join A as b on a.orgId = b.orgId and a.orgStatus = b.orgStatus - 1 order by orgId, orgStatus B之间orgIdcreatedTime之间加入表startedTime的新表。

完整的解决方案如下,

endedTime

给出了所需的表格。