SQL左连接与分组表

时间:2017-05-29 18:20:24

标签: sql oracle

在本网站上的上一个问题上获得了一些很好的帮助。 我是sql的新手并试图了解这个问题。 从表Tourenstatistik我将获得具有日期和时间的独特数据行。 ID。 然后我查看另一个表Vtsbreak并总结每个id在不同日期的持续时间,因为在同一日期可能有多个条目用于相同的id。 然后,我想在一个名为duration的列中返回该总和,用于唯一ID&它的约会对象。

我还需要为查询指定开始日期和结束日期。

我找到了类似的东西,但我无法让它发挥作用 出现错误ORA-00933:SQL命令未正确结束。

有什么建议吗?

Select
    Tourenstatistik.DATUM "Date",
    Tourenstatistik.MITARBEITER "ID", 
    VtsPause.Duration
From
Tourenstatistik
Where Tourenstatistik.DATUM >= TO_DATE('2017/05/15', 'yyyy/mm/dd') AND Tourenstatistik.DATUM <= TO_DATE('2017/05/16','yyyy/mm/dd') 
Left Join 
(Select
    Vtsbreak.MITARBEITER_NR "ID",
   sum(Vtsbreak.DAUER) "Duration",
   Vtsbreak.datum "Date"
From
Vtsbreak 
Where DATUM >= TO_DATE('2017/04/01', 'yyyy/mm/dd') AND DATUM <= TO_DATE('2017/05/27','yyyy/mm/dd') 
group by MITARBEITER_NR, datum;) as VtsPause 
On (Tourenstatistik.MITARBEITER = VtsPause.MITARBEITER_NR and Tourenstatistik.DATUM = VtsPause.DATUM) 
order by Tourenstatistik.DATUM, Tourenstatistik.MITARBEITER

2 个答案:

答案 0 :(得分:0)

尝试将“as”视为“作为VtsPause”。另外,在“datum;”之后删除分号。我也不会在内联查询中用双引号给出列别名,特别是因为你在ON子句中引用了实际的列名。

此外,您的第一个WHERE子句不合适。

也许这会奏效:

String clientId = MqttClient.generateClientId();
final MqttAndroidClient client = new MqttAndroidClient(this.getActivity().getApplicationContext(),"tcp://test.mosquitto.org", clientId);
    try {
        IMqttToken token = client.connect();
        token.setActionCallback(new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                // We are connected
                Log.d(TAG, "onSuccess");
                showToast("Connected");
                //Subscribing to a topic door/status on broker.hivemq.com
                final Activity activity = getActivity();
                client.setCallback( activity.this );

答案 1 :(得分:0)

您在子查询中给出了列别名。然后,您需要使用这些别名。此外,QByteArray myByteArray; myByteArray.resize( bufferSize ); byte * buffer = myByteArray.data(); // Pointer to the memory allocated by the QByteArray // Pass 'buffer' to library function.. 子句放错了地方。

WHERE

查询有很多问题,还有一些建议:

  • 查询中间有分号。
  • 您在子查询中提供了列别名,然后使用了原始列名称。
  • 你有一个错位的Select ts.DATUM as "Date", ts.MITARBEITER as "ID", b."Duration" From Tourenstatistik ts Left Join (Select b.MITARBEITER_NR, b.datum, sum(b.DAUER) as "Duration" From Vtsbreak b Where b.DATUM >= DATE '2017-04-01' AND b.DATUM <= DATE '2017-05-27' group by MITARBEITER_NR, datum ) b On ts.MITARBEITER = b.MITARBEITER_NR and ts.DATUM = b.DATUM Where ts.DATUM >= DATE '2017-05-15' and ts.DATUM <= DATE '2017-05-16' order by ts.DATUM, ts.MITARBEITER; 条款。

建议:

  • 使用表缩写作为表别名,因此查询更容易编写和阅读。
  • 使用WHERE关键字定义日期文字。